• 5091阅读
  • 1回复

PyQt4 cross Thread 问题 [复制链接]

上一主题 下一主题
离线yooi
 
只看楼主 倒序阅读 楼主  发表于: 2009-11-02
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我的测试程序:
from PyQt4 import QtCore

class TestThread(QtCore.QThread):
    signal = QtCore.pyqtSignal(str)
    def __init__(self, parent = None):
        super(TestThread, self).__init__(parent)
    def run(self):
        k = slot()
        QtCore.QObject.connect(self, QtCore.SIGNAL("signal(str)"), k, QtCore.SLOT("receive(str)"))
        self.exec_()
    def send(self, s):
        self.signal.emit(s)

class slot(QtCore.QObject):
    def __init__(self, parent = None):
        super(slot,self).__init__(parent)
    @QtCore.pyqtSlot(str)
    def receive(self, s):
        sys.stdout.write(s)
        sys.stdout.write('\n')

为什么我发送的signal 不能接受到,有什么错误么
谢谢
离线yooi
只看该作者 1楼 发表于: 2009-11-02
正确的PyQt4是这样,
结论在Qt C++中必须在线程空间中创建实例,但是在PyQt4中不能这样,会引起错误

from PyQt4 import QtCore

class TestThread(QtCore.QThread):
    signal = QtCore.pyqtSignal(str)
    def __init__(self, parent = None):
        super(TestThread, self).__init__(parent)
        k = slot()

    def run(self):
        QtCore.QObject.connect(self, QtCore.SIGNAL("signal(str)"), k, QtCore.SLOT("receive(str)"))
        self.exec_()
    def send(self, s):
        self.signal.emit(s)

class slot(QtCore.QObject):
    def __init__(self, parent = None):
        super(slot,self).__init__(parent)
    @QtCore.pyqtSlot(str)
    def receive(self, s):
        sys.stdout.write(s)
        sys.stdout.write('\n')
快速回复
限100 字节
 
上一个 下一个