- 目录
如果想在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