社区
Qt
帖子详情
qt为什么只能在主线程里进行UI操作?
IT人Key
2012-07-30 07:35:07
好几位大神告诉我qt只能在主线程new一个ui和进行一些ui相关的操作
我不懂为什么,期待大神解答?
...全文
2806
16
打赏
收藏
qt为什么只能在主线程里进行UI操作?
好几位大神告诉我qt只能在主线程new一个ui和进行一些ui相关的操作 我不懂为什么,期待大神解答?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
nlstone
2012-08-13
打赏
举报
回复
对Qt而言,一个进程里和窗口系统(譬如Win32的GDI, linux下的X11)UI事件关联的只有主UI线程,而并没有设计成多线程和系统窗口系统同时交互(复杂性,安全性,性能等原因),这应该是根源。
sno_guo
2012-08-12
打赏
举报
回复
呵呵,近来利用业余时间学习了下android ,感觉android中的ui界面也是这样的,只能在主线程中实现的,别的线程无法进行,呵呵,具体的原因我也在关注中。。。。
中才德创
2012-08-02
打赏
举报
回复
子线程,一般处理数据用的。
看山不是山看水不是水
2012-08-02
打赏
举报
回复
深入浅出MFC P559LZ可以看看 将的很详细
奔跑哥
2012-08-02
打赏
举报
回复
一般都是只能在主线程里操作UI。android UI 框架也是这样。
主线程只有一个,在他里面操作会安全。如果子线程都可以修改UI,那么这样有会潜在的线程直接的访问错误,操作错误。
tempofdownload
2012-08-02
打赏
举报
回复
多线程同时对UI操作,基本上都不行吧,
在QT线程中new个UI表示该UI所属线程是new的那个,需要改变UI的线程所属后才能和其他UI使用事件循环,处理什么的。
念茜
2012-08-02
打赏
举报
回复
如果你愿意,推荐给你一篇文章:
http://weblogs.java.net/blog/kgh/archive/2004/10/multithreaded_t.html
念茜
2012-08-02
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
引用 1 楼 的回复:
系统图形系统的限制
每个UI库都有这样的限制
但是我在线程里面new一个widget是可以正常显示的啊?我同事告诉我说是因为在主线程里面运行的app->exec(),所以这样次线程里面的ui无法接受到系统事件,是不是这样的原因啊?
[/Quote]
的确是这样。主线程是唯一允许创建QApplication或者QCoreApplication对象的,并且调用exec()。exec()启动了事件循环,一直在等待接收并且处理一个个Qt封装好的事件,比如鼠标移动事件,键盘按下事件等等。所以只有在主线程里你才可以方便利用各种Event去完成自己想要实现的需求。所以就限制你必须在主线程作UI相关操作。
除了规定,往根源说,再多的线程,实质上对于CPU来说,也是一件一件的处理,并不是我们凭空现象的同时处理。只是可以“智能”的处理一下当前迫切需要的数据,然后可以随时暂停,再去处理更加迫切的。如果2个线程同时处理UI显示,一个线程正在用于和用户交互更新显示,另外一个线程就只能是等待状态,并不能完成我们所期望的同时刷新UI的期望。
所以,基本上大部分应用开发框架都限制更新、创建UI必须在主线程里完成,而逻辑运算可以匹出新线程去完成。
多线程,越方便越快捷也就越容易隐藏bug,多线程间数据同步很容易搞乱,互斥量、读写锁、信号、共享等等。想要多线程同步处理UI更新,你也要给伟大的框架开发程序员们一些时间呵呵……
wshn13
2012-08-02
打赏
举报
回复
不是所有图形库都不能在线程操作界面的……
zhu_xz
2012-08-01
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
但是我在线程里面new一个widget是可以正常显示的啊?我同事告诉我说是因为在主线程里面运行的app->exec(),所以这样次线程里面的ui无法接受到系统事件,是不是这样的原因啊?
[/Quote]
这是一个原因
IT人Key
2012-08-01
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
系统图形系统的限制
每个UI库都有这样的限制
[/Quote]但是我在线程里面new一个widget是可以正常显示的啊?我同事告诉我说是因为在主线程里面运行的app->exec(),所以这样次线程里面的ui无法接受到系统事件,是不是这样的原因啊?
IT人Key
2012-08-01
打赏
举报
回复
还有呢?能详细讲讲吗?大哥[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
但是我在线程里面new一个widget是可以正常显示的啊?我同事告诉我说是因为在主线程里面运行的app->exec(),所以这样次线程里面的ui无法接受到系统事件,是不是这样的原因啊?
这是一个原因
[/Quote]
SilenceSu
2012-07-31
打赏
举报
回复
学习了
Quote=引用 1 楼 的回复:]
系统图形系统的限制
每个UI库都有这样的限制
[/Quote]
刀刀亮
2012-07-31
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
系统图形系统的限制
每个UI库都有这样的限制
[/Quote]
第一次听说,学习了
zhu_xz
2012-07-30
打赏
举报
回复
系统图形系统的限制
每个UI库都有这样的限制
qt
编程_在子
线程
中更新
UI
界面
qt
编程_在子
线程
中更新
UI
界面
Qt
子
线程
更新数据发到
主
线程
显示.rar
Qt
的子
线程
无法直接更新
主
UI
,需要发送信号到
主
线程
进行
更新,我用的
QT
ableWidget展示数据。
Qt
音视频开发实战
课程摘要1
Qt
音视频开发实战 是陈超老师用10年以上音视频一线实战开发经验,四年音视频开发教学经验打造的
Qt
音视频开发课程。2
Qt
音视频开发实战以
Qt
c++开发为中心。所有课程全部围绕
Qt
音视频开发展开。3 非常适合那些只做
Qt
开发的工程师来学习,学习更容易一些。学习目标,培养高级
Qt
音视频开发工程师.4
Qt
音视频开发实战适合那些掌握
Qt
基础开发,初级开发工程师,月薪在20k以下,通过学习,达到更高薪水的
Qt
高级开发工程师。 课程优势1 老师过去15年+ 音视频,网络通讯,数字图像处理一线实战经验。过去四年积累了丰富的音视频开发教学经验,学员从年薪30w~50w,就职于腾讯,阿
里
等各大互联网公司。2 老师10多年
Qt
开发经验,长期大量使用
Qt
开发项目,国内最早一批使用
Qt
的程序员。3 QQ 一对一教学指导,阶段性作业案例小项目指导,就业面试指导。 课程内容1
Qt
核心基础加强。对于那些学了很多年
Qt
开发而不得要领的学员非常友好。2 音视频开发基础。音视频原理,RGB YUV, 音频原理。图像压缩编码,音频压缩编码,H.264压缩,H.264编码原理 I P B SPS PPS解析, 视频存储容器,mp4 , AAC.
Qt
音频视频采集,FFmpeg编码,解码,x264编码,AAC编码。mp3编码。格式转换。视频播放器内核。图像渲染。3 OpenGL数字图像处理基础。OpenGL基础,渲染管线,shader编程。滤镜,美颜,后期处理。编写渲染引擎。4 网络socket通讯编程,自定义私有协议。TCP/UDP音视频传输。 学员要求1 熟悉c/c++,掌握
Qt
基本控件,类基础。2 每天学习两小时,学习周期3~5个月,做完练习,小项目。
Qt
5_
QT
hread_信号传递
由于只有
UI
主
线程
才可以
操作
桌面
UI
,那么在多
线程
中,其它
线程
的数据若要显示出来,可以通过全局共用变量来实现,或者通过
线程
通信的方式来实现,本例程就是通过
UI
上的按钮启动
线程
,在
线程
中发送信号到
UI
主
线程
,并在
UI
上显示出来
QT
多
线程
—
主
界面卡死解决方案
由于耗时的
操作
会独占系统cpu资源 ,让界面卡死在那
里
,这时需要考虑多
线程
方案,将耗时的
操作
放在
主
线程
之外的
线程
中执行。该demo通过多
线程
为
主
界面卡死提供一种解决方案。
Qt
16,216
社区成员
26,595
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章