1

メインスレッドではない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().)

これどうやってするの?助けてください!

4

1 に答える 1

3

サブクラスと、オブジェクトQThreadを渡すための設定方法に問題はありません。Queueオプションの親を 2 番目のパラメーターとして渡して設定することもお勧めします。

ほとんどの場合、QtGui 操作 (描画関連) を実行するオブジェクトをスレッドに渡しています。その場合、QtGui 描画関連のメソッドを呼び出すことはできません。これらはすべてメインスレッドで実行する必要があります。他のスレッドでデータ処理を行ってから、メイン スレッドがウィジェットの更新を行うようにシグナルを送信します。

エラーの原因の手がかりとして、キューに何を送信しているか、具体的にはスレッド内で何を行っているかを探します。QTextCursorどこかで、描画イベントをトリガーしてキューに入れようとしている で何かをしています。

于 2012-12-03T00:38:19.490 に答える