首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从作为成员的QThread更改QMainWindow上的Qt小部件?

如何从作为成员的QThread更改QMainWindow上的Qt小部件?
EN

Stack Overflow用户
提问于 2009-07-15 05:41:38
回答 2查看 2.2K关注 0票数 1

我把我的主窗体做成了Qt设计器,并继承了QMainWindow和UI。我需要有其他线程运行,我需要这些线程来改变主窗体上的东西,如进度条,液晶显示器。

如何让其他线程访问主窗体上的小部件?

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2009-07-15 05:55:04

使用信号/插槽。从4.x开始,Trolltech引入了threadsafe机制来发送信号,例如,在connect()函数中使用Qt::BlockingQueuedConnection参数。

有关详细信息,请参阅:http://lists.trolltech.com/qt-interest/2007-03/thread00260-0.html

票数 3
EN

Stack Overflow用户

发布于 2009-07-15 06:28:27

正如Flavius Suciu所提到的,您可以使用跨线程信号/插槽连接。它们也可以携带参数,但是,如果你不只传递基本类型或Qt类型作为信号参数,而是你自己的自定义struct,你需要这样告诉Qt:

代码语言:javascript
复制
namespace MyNamespace { // if any...
    struct MyClass { /* ... */ };
} // if any
Q_DECLARE_METATYPE( MyNamespace::MyClass )

这允许将MyClass填充到QVariants中,这是Qt内部用来跨越线程边界传送信号参数副本的工具。

您可能还需要调用

代码语言:javascript
复制
qRegisterMetaType<MyNamespace::MyClass>();

请参阅Q_DECLARE_METATYPE的文档

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1129587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档