在非GUI线程中不断更新QLabel
我在另一个线程中访问 Qt GUI 的 QLabel 的 QPixmap 因为我最终将使用它在 QLabel 中显示 mjpeg 流,并且我决定使用 QLabel 因为它是最简单的方法
它应该看起来像“Live”,并且不会阻塞 UI,从而使用另一个(非 GUI)线程。
QLabel 中没有显示任何内容。只有例外 QPixmap:在 GUI 线程之外使用像素图是不安全的
有更好或更正确的方法吗?
这是我的另一个线程的 PyQt 代码: self.theQlabel.setPixmap(QtGui.QPixmap.fromImage(myQimg)
I access the Qt GUI's QLabel's QPixmap in another thread since I will finally use this to display mjpeg stream in QLabel, and I decided to use QLabel since its the easiest way
It should look like 'Live' and not block the UI thus using another (non-gui) thread.
nothing shows up in the QLabel. only the exception QPixmap: It is not safe to use pixmaps outside the GUI thread
any better or correct way to do this ?
here is my PyQt code of another thread: self.theQlabel.setPixmap(QtGui.QPixmap.fromImage(myQimg)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不要直接设置像素图,而是让外部线程发出
updatePixmap
信号。然后在GUI线程中,监听信号并更新当时的像素图。类似的东西应该可以工作(在 C++ 中):Instead of directly setting the pixmap, make the external thread emit an
updatePixmap
signal. Then in the GUI thread, listen to the signal and update the pixamp at that time. Something like that should work (in C++):我认为在 GUI 线程以外的任何地方创建
QPixmap
都可能是危险的。您可能需要考虑传递QImage
并将其转换为主线程中的QPixmap
。我找不到支持此断言的直接参考,但是http ://developer.qt.nokia.com/doc/qt-4.8/thread-basics.html
提示
电子邮件线程位于
http://lists.trolltech.com/qt-interest /2008-11/msg00534.html
似乎也同意我的观点。
I think that it might be dangerous to even create a
QPixmap
in anything other than the GUI thread. You might want to consider passing aQImage
and converting it to aQPixmap
in the main thread. I can't find a direct reference to support this assertion, buthttp://developer.qt.nokia.com/doc/qt-4.8/thread-basics.html
hints that
The email thread at
http://lists.trolltech.com/qt-interest/2008-11/msg00534.html
also seems to agree with me.
将 RAW DirectX/OpenGL 操作系统上下文创建到此 QLabel 的 winId() 中并执行您想做的任何操作。我认为,这是高性能高清视频的最佳方式,也是唯一的方式:)有时你只需要使用RAW的东西来实现最大性能并触摸计算机中的铁:)
Create RAW DirectX/OpenGL OS context into this QLabel's winId() and do whatever you want. I think, this is the best way for high performance HD video, and the ONLY way :) sometimes you just HAVE to use RAW things to achieve the maximum performance and touch the iron in your computer :)