转出
QMetaObject::invokeMethod
具有
Qt::QueuedConnection
实际使用
QCoreApplication::postEvent
在它的实现中(谢谢@peppe!)但是,当
-
用于
qt::队列连接
-
由qt(或afaik)管理的接收者的生存期,至少在完成调用之前
-
除此之外,从非主qt线程对收件人没有其他操作
-
由qt管理的参数的生存期(使用q_ars或按值调用时应该很好)
还没有记录。但我创造了一个
bug report
和
qt forum
讨论,似乎是有意的,而且
documentation change ticket
已创建。
我最后使用的是常见的模式
class MyWidget : public QWidget {
Q_OBJECT
public slots:
void onFooBar(QString);
};
void asio_handler(const std::string& string, MyWidget* my_widget) {
QMetaObject::invokeMethod(
my_widget, "onFooBar", Qt::QueuedConnection,
Q_ARG(QString, QString::fromStdString(string))
);
}