如何解决在已经运行的QThread上调用函数
我已经在Internet(和Qt文档)上看到了许多使用QThread
的示例,该类是该类的子类,然后将一个工作对象移至该线程。然后,实际上QThread::started()
信号被连接到worker类对象的某个插槽以运行某个功能。
现在,我想在项目中执行相同的操作,不同之处在于,我想将worker类移动到已经运行的线程中,然后在该线程上调用一些函数。为了实现这一目标,我想出了一点类似于以下代码的技巧,其中我使用QTimer
类在我的worker类中调用了一个公共插槽。
QThread myThread;
myThread.setObjectName("myThread");
myThread.start();
Worker worker;
worker.moveToThread(&myThread);
QTimer::singleShot(0,&worker,[&worker](){
worker.doStuff(5);
});
是否有更惯用的方式实现同一件事?
解决方法
如果“ doStuff”是一个插槽,则可以使用QMetaObject :: invokeMethod:
QMetaObject::invokeMethod(&worker,"doStuff",Qt::QueuedConnection,Q_ARG(int,5));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。