试图在线程中保持 qt 小部件的焦点

Posted

技术标签:

【中文标题】试图在线程中保持 qt 小部件的焦点【英文标题】:Trying to keep a qt widget in focus in a thread 【发布时间】:2022-01-12 18:11:33 【问题描述】:

我有一个主线程,它拥有一个带有我想要重复更新的标签的小部件。在父线程中我可以循环一千次(测试运行)并且它工作正常。当我将小部件的实例传递到一个新线程并尝试在那里执行它时,它会更新一点然后停止。如果我将鼠标悬停在它上面,当我将鼠标移开时,它会很好地更新并再次停止。我假设鼠标正在强制小部件进入焦点和/或“活动窗口”状态,但是当我尝试调用任何一种方法来设置焦点或活动窗口状态时,它没有任何区别。也许它正在提高线程的优先级?

有没有一种方法可以确保每次更新小部件标签的调用都被看到,而无需将鼠标移到它上面?

【问题讨论】:

请提供minimal reproducible example。除了运行main 的线程之外,您不能直接从任何线程修改QWidget——它不受支持。您可能应该改用排队信号/槽机制。 这能回答你的问题吗? Modify Qt GUI from background worker thread 【参考方案1】:

我找到了答案。连接信号和槽,以便在调用主线程上的槽的线程中发出信号,这将使用线程中设置的新值更新小部件。

【讨论】:

以上是关于试图在线程中保持 qt 小部件的焦点的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法区分 Qt 小部件是通过鼠标单击还是从表格按键获得焦点?

Qt 加载消息应保持在父小部件的顶部并居中

其他非 qt 窗口顶部的 Qt 小部件

Qt将两个小部件“粘合”在一起

Qt将小部件添加到GraphicsView?

从另一个线程更新 QT 小部件的不那么冗长的方法?