- 目录
如果想在QThread或者threading.Thread中不通过信号直接操作UI,则可以使用QMetaObject.invokeMethod调用。
该函数一般有常用的几种调用方法:
- 直接调用槽函数:
QMetaObject.invokeMethod(uiobj, 'slot_method', Qt.QueuedConnection) - 直接调用信号:
QMetaObject.invokeMethod(uiobj, 'signal_method', Qt.QueuedConnection) - 调用信号或槽函数并传递参数:
QMetaObject.invokeMethod(uiobj, 'method', Qt.QueuedConnection, Q_ARG(str, 'text')) - 调用槽函数得到返回值:
QMetaObject.invokeMethod(uiobj, 'slot_method', Qt.DirectConnection, Q_RETURN_ARG(str)) - 调用带参数的槽函数得到返回值:
QMetaObject.invokeMethod(uiobj, 'slot_method', Qt.DirectConnection, Q_RETURN_ARG(int), Q_ARG(bool, False)), 传入bool类型的参数,获取int类型返回值
这里需要注意:
- 调用函数都是异步队列方式,需要使用
Qt.QueuedConnection - 而要得到返回值则必须使用同步方式, 即
Qt.DirectConnection
