Qt QMetaObject::invokeMethod

简介

QMetaObject::invokeMethod是一个静态函数,用于在Qt信号槽机制之外,异步调用QObject子类的公开槽函数或者调用任意可调用对象。主要处理不同线程异步调用或延时操作。


参数

复制代码
bool QMetaObject::invokeMethod(QObject *obj, 
                              const char *member,
                              Qt::ConnectionType type = Qt::AutoConnection,
                              QGenericReturnArgument ret = QGenericReturnArgument(),
                              QGenericArgument val0 = QGenericArgument(),
                              QGenericArgument val1 = QGenericArgument(),
                              QGenericArgument val2 = QGenericArgument(),
                              QGenericArgument val3 = QGenericArgument(),
                              QGenericArgument val4 = QGenericArgument(),
                              QGenericArgument val5 = QGenericArgument(),
                              QGenericArgument val6 = QGenericArgument(),
                              QGenericArgument val7 = QGenericArgument(),
                              QGenericArgument val8 = QGenericArgument(),
                              QGenericArgument val9 = QGenericArgument());
  • obj:调用槽函数的对象指针。
  • member:槽函数的名字,以字符串的方式。
  • type:连接类型,默认为 Qt::AutoConnection,可以根据需要选择 Qt::DirectConnection(直接连接,同步调用)或 Qt::QueuedConnection(队列连接,异步调用)
  • ret:返回值,需要用QGenericReturnArgument包装。
  • val:槽函数的参数,需要用QGenericArgument包装。

示例:

void test(); //无参数

bool testSlot(int value); //带参数

复制代码
//异步执行test函数
QMetaObject::invokeMethod(this, "test", Qt::QueuedConnection);

int arg = 666;
QGenericArgument  argVa1("value", &arg);
QGenericReturnArgument ret("result", &returnValue);
QMetaObject::invokeMethod(myObject,"testSlot",Qt::QueuedConnection,ret,argVa1);

注意:

调用槽函数时,必须确保被调用的对象存在且它所在的线程已经进入了事件循环(GUI线程就是事件循环线程)。如果不在GUI现场,则需要保证对象的生命周期足够长,知道参函数被调用完成为止。

相关推荐
段一凡-华北理工大学22 分钟前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe31 分钟前
C++——多态
开发语言·c++
心平气和量大福大1 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
从零开始的代码生活_3 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸3 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
Quz3 小时前
QML 信号与槽:直接绑定与跨文件通信
qt·编程语言·设计
GIS阵地3 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
yaoxin5211234 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
groundhappy4 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
小钻风33665 小时前
Spring Boot 文件上传详解:深入理解 MultipartFile 的使用与原理
java·开发语言