bug -- Pyqt5+openCV报错(QObject::moveToThread:)

报错什么线程无法移动,妈个鸡狗屁不是

使用pyqt和opencv的做的GUI程序中出线的问题

就是opcv-python的版本对不上

系统py版本(conda)报错
Ubuntu213.9Cannot move to target thread
QObject::moveToThread: Current thread (0x5560b72388b0) is not the object's thread (0x5560b74641b0).
Cannot move to target thread (0x5560b72388b0)


这个报错是上面的报错引起的
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/fly/anaconda3/envs/video/lib/python3.9/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.(

Available platform plugins are: xcb, eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl.

解决方案:降版本,网上的都是说降opencv版本,这里推荐降python(血泪记忆)

opencv-python4.1.2.30
把上面的文件下载,本地安装即可(虚拟环境切换到相应的虚拟环境)

pip install opencv_python-4.1.2.30-cp38-cp38-manylinux1_x86_64.whl 

成功解决

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5中,QObject::moveToThread()函数可以将一个QObject对象移动到另一个线程中。使用该函数可以实现跨线程的信号和槽连接,以及在多线程应用中管理对象的生命周期。具体用法如下: ```python # 定义一个MyObject类 class MyObject(QObject): mySignal = pyqtSignal(int) def __init__(self, parent=None): super().__init__(parent) @pyqtSlot(int) def mySlot(self, value): print("mySlot called with value:", value) # 创建一个线程对象 thread = QThread() # 创建一个MyObject对象 obj = MyObject() # 将obj对象移动到thread线程中 obj.moveToThread(thread) # 在obj对象所在的线程中发出信号 obj.mySignal.emit(123) # 在thread线程中执行obj对象的槽函数 obj.mySignal.connect(obj.mySlot, Qt.QueuedConnection) thread.started.connect(obj.mySlot) # 启动线程 thread.start() ``` 在这个例子中,我们首先创建了一个线程对象thread,然后创建了一个MyObject对象obj,接着使用obj.moveToThread(thread)将obj对象移动到thread线程中。在obj对象所在的线程中发出mySignal信号,然后使用obj.mySignal.connect(obj.mySlot, Qt.QueuedConnection)将mySignal信号和obj对象的槽函数连接起来,并指定连接方式为Qt.QueuedConnection,即队列连接。最后,将thread.started.connect(obj.mySlot)将thread的started信号与obj的mySlot槽函数连接起来,当thread启动时,会自动执行obj.mySlot槽函数。最后,启动线程thread。 需要注意的是,使用QObject::moveToThread()函数将一个对象移动到另一个线程中时,需要确保该对象的成员变量和方法都是线程安全的。另外,建议在对象的构造函数中将其移动到所属线程中,以便在对象生命周期内始终处于同一线程中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值