2021-08-25QMetaObject::invokeMethod

之前一直只知道用connect把信号和槽连接起来用,看别人的代码一直没看到connect,但是信号又确实调用了。。。。

现在知道可以这个方法调用一个函数、槽或者信号

原型是:[static] bool QMetaObject::invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument(nullptr), 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())

还挺长的,第一个参数是被调用对象的指针

第二个参数是方法、信号或槽的名称

第三个参数是调用的类型,有同步调用和异步调用

第四个参数是接收被调用函数的返回值;注意,如果调用是异步的,则无法计算返回值

QGenericArgument和QGenericReturnArgument是内部帮助器类。由于可以动态调用信号和插槽,因此必须使用Q_ARG()和Q_RETURN_ARG()宏来封装参数。Q_ARG()接受类型名称和该类型的常量引用;Q_RETURN_ARG()接受类型名和非常量引用。

也就是接收的参数需要用Q_ARG()或Q_RETURN_ARG()封装起来,最多接收9个参数

You only need to pass the name of the signal or slot to this function, not the entire signature. For example, to asynchronously invoke the quit() slot on a QThread, use the following code:

只需要将信号或插槽的名称传递给此函数,而不需要传递整个签名。例如,要异步调用QThread上的quit()插槽,可以使用以下代码:

 QMetaObject::invokeMethod(thread, "quit",Qt::QueuedConnection);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值