c – QMetaObject :: invokeMethod返回true,但从不调用方法
我正在尝试使用QMetaObject :: invokeMethod在GUI线程上运行一个方法,该方法返回true.但是,如果我使用Qt :: QueuedConnection,我的方法永远不会被调用(即使invokeMethod返回true).
这就是我正在使用的: QMetaObject::invokeMethod(this,"draw_widgets",Qt::QueuedConnection) 我没有得到任何错误消息或任何东西…… draw_widgets是void draw_widgets()类型的公共插槽 我将不胜感激任何帮助,或如何检查为什么不调用该方法. 谢谢. 解决方法
“true”告诉您邮件已成功排队.这并不意味着排队的消息曾被处理过……
让我们说你的程序有10个线程(Thread1-Thread10).您从Thread7排队消息.它将排队到哪个线程?何时处理此队列中的项目? 答案是每个QObject都有一个叫做Thread Affinity的东西,这就是运行排队槽的线程.默认亲缘关系是创建对象的线程(但您可以使用 如果要将某些内容排入GUI线程,则此指针指定的对象应具有GUI线程的亲和性.您可以使用 但无论如何,无论你排队什么线程……你必须在该线程上运行某种消息泵.例如,请查看 (作为旁注,通常不需要直接调用QMetaObject :: invokeMethod.您可以创建一个信号并将其绑定到一个插槽,然后发出信号代替调用.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |