首页 > 解决方案 > QObject::connect: 无法对“QTextCursor”类型的参数进行排队(确保使用 qRegisterMetaType() 注册了“QTextCursor”。)

问题描述

from PyQt4 import QtCore, QtGui
import thread

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Form(object):
    UI = ""
    new_msg_to_send = ""
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.setWindowModality(QtCore.Qt.NonModal)
        Form.resize(425, 300)
        Form.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.text_msgs = QtGui.QTextEdit(Form)
        self.text_msgs.setGeometry(QtCore.QRect(0, 0, 431, 231))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Microsoft JhengHei"))
        font.setPointSize(10)
        self.text_msgs.setFont(font)
        self.text_msgs.setReadOnly(True)
        self.text_msgs.setObjectName(_fromUtf8("text_msgs"))
        self.lineEdit = QtGui.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(0, 230, 311, 71))
        self.lineEdit.setText(_fromUtf8(""))
        self.lineEdit.setFrame(True)
        self.lineEdit.setEchoMode(QtGui.QLineEdit.Normal)
        self.lineEdit.setCursorMoveStyle(QtCore.Qt.LogicalMoveStyle)
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(310, 230, 121, 71))
        self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
        icon = QtGui.QIcon.fromTheme(_fromUtf8("send"))
        self.pushButton.setIcon(icon)
        self.pushButton.setAutoRepeat(False)
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.pushButton.clicked.connect(lambda:self.send_msg())

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))
        self.pushButton.setText(_translate("Form", "send", None))

    def send_msg(self):
        text = self.lineEdit.text()
        self.lineEdit.setText("")
        self.text_msgs.append("You: "+text)
        Ui_Form.new_msg_to_send = text

    def new_msg(self, msg):
        try:
            self.text_msgs.append("Other: "+msg)   
        except:
            i = 1


def start_ui():
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Ui_Form.UI = ui
    Form.show()
    sys.exit(app.exec_())

def ui_thread():
    thread.start_new_thread(start_ui, ())

我收到错误:

QObject::connect: Cannot queue arguments of type 'QTextCursor'    
(Make sure 'QTextCursor' is registered using qRegisterMetaType().)

当我使用这个 UI 时,它是我第一次更改文本编辑小部件时工作。在这段时间之后,我收到了错误。奇怪的是,即使出现错误消息,UI 仍然可以工作,它导致的唯一问题是我无法通过函数 new_msg() 更改文本编辑小部件

标签: pythonpyqt4qtextcursor

解决方案


推荐阅读