python - 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() 更改文本编辑小部件