我把我的主窗体做成了Qt设计器,并继承了QMainWindow和UI。我需要有其他线程运行,我需要这些线程来改变主窗体上的东西,如进度条,液晶显示器。
如何让其他线程访问主窗体上的小部件?
谢谢你的帮助。
发布于 2009-07-15 05:55:04
使用信号/插槽。从4.x开始,Trolltech引入了threadsafe机制来发送信号,例如,在connect()函数中使用Qt::BlockingQueuedConnection参数。
有关详细信息,请参阅:http://lists.trolltech.com/qt-interest/2007-03/thread00260-0.html
发布于 2009-07-15 06:28:27
正如Flavius Suciu所提到的,您可以使用跨线程信号/插槽连接。它们也可以携带参数,但是,如果你不只传递基本类型或Qt类型作为信号参数,而是你自己的自定义struct,你需要这样告诉Qt:
namespace MyNamespace { // if any...
struct MyClass { /* ... */ };
} // if any
Q_DECLARE_METATYPE( MyNamespace::MyClass )这允许将MyClass填充到QVariants中,这是Qt内部用来跨越线程边界传送信号参数副本的工具。
您可能还需要调用
qRegisterMetaType<MyNamespace::MyClass>();请参阅Q_DECLARE_METATYPE的文档
https://stackoverflow.com/questions/1129587
复制相似问题