PyQt-QObject::connect: Cannot queue arguments...报错

【问题】

源码:

class Windows(QtGui.QWidget):
    # Creates a widget containing:
    # - a QLineEdit (status_widget)
    # - a button, connected to on_run_clicked

    def on_run_clicked(self):
        def update(text):
            self.widget.setText(text)

        threading.Thread(target=run, args=(update, )).start()

但是如果将 QLineEdit换成QTextEdit,并使用了append方法就会得到以下错误:

QObject::connect: Cannot queue arguments of type ‘QTextCursor‘

(Make sure ‘QTextCursor‘ is registered using qRegisterMetaType().)

【解决】

我们不能通过线程来修改UI,较为安全的修改用户界面的方式是向UI窗口发送信号(signal),较为简单的方式是使用 Qt threading

class MyThread(QtCore.QThread):
    updated = QtCore.pyqtSignal(str)

    def run( self ):
        # do some functionality
        for i in range(10000):
            self.updated.emit(str(i))

class Windows(QtGui.QWidget):
    def __init__( self, parent = None ):
        super(Windows, self).__init__(parent)

        self._thread = MyThread(self)
        self._thread.updated.connect(self.updateText)

        # create a line edit and a button

        self._button.clicked.connect(self._thread.start)

    def updateText( self, text ):
        self.widget.setText(text)
时间: 2024-10-18 16:58:09

PyQt-QObject::connect: Cannot queue arguments...报错的相关文章

QObject::connect: Cannot queue arguments of type "xxx",(Make sure "xxx" is registed using qRegisterMetaType().)原因及解决方法

在线程中通过信号和槽函数传递信息的时候,由于用到了自己定义的参数结构:QHash<int , pMsg>,于是在发生信号传递的时候出现了报错: QObject::connect: Cannot queue arguments of type "QHash<int , pMsg>",(Make sure "QHash<int , pMsg>" is registed using qRegisterMetaType().) 查找到原因

Object::connect: Cannot queue arguments of type &#39;QMap&lt;QString,QString&gt;&#39;(要使用qRegisterMetaType&lt;StringMap&gt;进行注册)

QObject::connect: Cannot queue arguments of type 'QMap<QString,QString>',(Make sure 'QMap<QString,QString>' is registered using qRegisterMetaType().). 上述错误,只有在跨线程信号传递时才会出现.  因为QMap是QT可识别的基本类型,不需要再注册元对象系统中,在同一个线程中运行没有问题. 源码: Cpp代码   // 线程类 thre

解决: ./check_oracle_health --connect orcl --mode connection-time 报错的问题

错误提示 ./check_oracle_health --connect orcl --mode connection-time CRITICAL - cannot connect to orcl. install_driver(Oracle) failed: Can't locate DBD/Oracle.pm in @INC (@INC contains: . /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/ven

报错处理——TypeError: Dog() takes no arguments

TypeError: Dog() takes no arguments报错后发现_init_()有问题,究竟有什么问题呢?我们发现__init__和_init_有很大区别:前者是两个英文状态下的下划线,只是视觉问题没有发现而已,然而如果将init写成int也会出现同样错误 原文地址:https://www.cnblogs.com/MT-IT/p/11310842.html

【NetApp】SnapDrive安装过程中遇到的一些报错

报错信息1:Failed to get Data ONTAP version running on the storage system NetApp814b as it is not reachable. Ensure proper network connectivity and make sure the ..." 报错截图: 报错原因:在排除各种SnapDrive与存储控制器的网络问题后,因为该报错实在模拟器实验环境下产生的,NetApp 7mode同一个DataOntap模拟器的sys

QT多重继承的时候,要把QObject放在最前面,否则报错——C++认为人性本恶,默认都是私有的,这点和Delphi的世界观不一样

在买来的控件(没有源码)的基础上,想加入QObject的一些特性,不得不多继承: class MyProgress : public CProgress, public QObject 但总是报错: release\moc_my_tool.cpp:80:12: error: 'qt_metacast' is not a member of 'CProgress' return CProgress::qt_metacast(_clname); 清除临时文件,重新编译几次后,仍是如此,心想难道QT不

解决mysql报错Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’

启动mysql 报错: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 1.先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.另外看看是不是权限问题. 2.确定你的mysql.sock是不是在那个位置,mysql -u 你的mysql用户名 -p -S /var/lib/mysql/

连接mysql报错:error 2003 (hy000):can&#39;t connect to mysql server on &#39;localhost&#39; (10061)

一.mysql 的bin目录下有个MySQLInstanceConfig.exe,运行就可以进行创建数据库实例,创建实例时也可以生成windows 服务,把服务设置成自动启动就可以了 二.安装在D盘的discuzz!打开后出现上述错误,请问应如何处理?winmysqladmin已经启动,但三色树上有一个小红点如果出现"ERROR 2003: Can't connect to MySQL server on 'localhost' (10061)",说明你的MySQL还没有启动.解决办法

报错:1130-host ... is not allowed to connect to this MySql server

解决方法: 1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%" mysql -u root -pvmwaremysql>use mysql; mysql>update user set host = '%