• 14383阅读
  • 9回复

qt线程如何获取MainWindow的指针 [复制链接]

上一主题 下一主题
离线wjz2047
 

只看楼主 正序阅读 楼主  发表于: 2013-11-15
我创建了一个线程,但是想在线程中使用MainWindow的函数,请问怎么实现呢?
离线wjz2047

只看该作者 9楼 发表于: 2013-11-19
回 8楼(XChinux) 的帖子
赞,是应该使用信号槽机制
离线XChinux

只看该作者 8楼 发表于: 2013-11-19
使用信号连接吧,正规方法。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线rpdhunter

只看该作者 7楼 发表于: 2013-11-18
回 6楼(dbzhang800) 的帖子
版主大侠,您是说我这样做存在安全隐患?

不过目前一切都没问题
离线dbzhang800

只看该作者 6楼 发表于: 2013-11-18
引用第3楼rpdhunter于2013-11-16 12:18发表的  :
你说的不完全对,次线程是可以读取主线程ui数据的,只是不能写操作,获得mainwindow指针的方式很容易,只需要建立线程的时候把主线程指针作为次线程的构造函数参数就可以了


多线程是很复杂的东西。 即使写的代码在99.99%的情况下都正常,也并不能证明代码是正确的。


http://qt-project.org/doc/qt-5.1/qtcore/threads-reentrancy.html

Qt classes are only documented as thread-safe if they are intended to be used by multiple threads. If a function is not marked asthread-safe or reentrant, it should not be used from different threads.

http://qt-project.org/doc/qt-5.1/qtcore/threads-qobject.html

the GUI classes, notably QWidget and all its subclasses, are not reentrant. They can only be used from the main thread.

离线wjz2047

只看该作者 5楼 发表于: 2013-11-16
回 4楼(rpdhunter) 的帖子
O(∩_∩)O谢谢
离线rpdhunter

只看该作者 4楼 发表于: 2013-11-16
不过读取ui的时候需要注意两点:
1.子线程需要包含"ui_mainwindow.h"头文件
2.mainwindow中ui指针应当定义为public(默认是private)
离线rpdhunter

只看该作者 3楼 发表于: 2013-11-16
引用第1楼friendbaby于2013-11-15 16:38发表的  :
次线程不可以对UI操作。
可以采用发送信号槽的方式。
.......

你说的不完全对,次线程是可以读取主线程ui数据的,只是不能写操作,获得mainwindow指针的方式很容易,只需要建立线程的时候把主线程指针作为次线程的构造函数参数就可以了
离线wjz2047

只看该作者 2楼 发表于: 2013-11-15
回 1楼(friendbaby) 的帖子
多谢指点
离线friendbaby

只看该作者 1楼 发表于: 2013-11-15
次线程不可以对UI操作。
可以采用发送信号槽的方式。



Smiling is best language , can express everything , also can conceal everything.
快速回复
限100 字节
 
上一个 下一个