如何将参数发送到Qthread

时间:2012-12-02 23:28:03

标签: python multithreading qt pyqt

我试图将参数发送到不是主线程的Qthread。 我在我的主线程中有这个对象,我想将它发送到另一个线程:

q = Queue()

我希望将q发送到此主题:

class Sender(QtCore.QThread):
def __init__(self,q):
    super(Sender,self).__init__()
    self.q=q
def run(self):

    while True:

        try: line = q.get_nowait()
         # or q.get(timeout=.1)
        except Empty: 
            pass
        else: 
           self.emit(QtCore.SIGNAL('tri()')) 

我试着这个:

class Sender(QtCore.QThread):
    def __init__(self,q):
        super(Sender,self).__init__()
        self.q=q
self.sender= Sender(q)

但我得到了这个错误:

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

我该怎么做? 请帮忙!

1 个答案:

答案 0 :(得分:3)

您的QThread子类没有问题,以及如何设置它以传递Queue对象。虽然我也建议传递并设置一个可选的父项作为第二个参数。

您最常遇到的是将正在执行QtGui操作(绘图相关)的对象传递到您的线程中。如果是这种情况,则无法调用任何QtGui绘图相关方法。它们都必须在主线程中执行。在其他线程中进行任何数据处理,然后为主线程发出信号以进行小部件更新。

查找您要发送到队列中的内容,特别是您在线程内部使用它的内容,作为错误来源的提示。在某个地方,你正在用QTextCursor做一些事情,它试图触发并排队一个绘画事件。