2017-03-18 10 views
0

qtウィジェットウィンドウを他のスレッドから隠すことはできますか?例えば
他のスレッドからptr->window->hide();
を使用している場合、それはエラーでクラッシュ:qtウィジェットウィンドウを他のスレッドから隠すことはできますか?

Cannot send events to objects owned by a different thread...

はシグナルとスロットは、この場合に使用されるか、または容易があるれるべきです。代替案?

+0

*** qtウィジェットウィンドウを他のスレッドから隠すことはできますか?***はい、信号とスロットを使用します。あなたのGUIの隠しスロットに接続されているあなたのスレッドから信号を出してください。 'QueuedConnection'は、クロススレッド信号/スロット接続を扱います。 – drescherjm

答えて

2

Is it possible to hide Qt widget window from other thread?

あなたが必要とするのは、ワーカースレッドの信号をUIスレッドのスロットに接続することだけです。そして幸運にもQWidget::hideは既にスロットです(それを自分のスロットに入れる必要はありません)。

// in WorkerQObject.h file: 
class WorkerQObject : public QObject 
{ 
    Q_OBJECT 
public: 
    /// 
signals: 
     void hideUI(); 
private: 
    /// 
}; 

// in WorkerQObject.cpp file: 
WorkerQObject::WorkerQObject() 
{ 
    // thread initialization; move to thread etc. 
    connect(this, SIGNAL(hideUI()), pWidget, SLOT(hide())); 
} 

void WorkerQObject::methodOnWorkerThread() 
{ 
    emit hideUI(); 
} 
+4

これに代わる方法として、新しいシグナルを定義することを避けるために、[QMetaObject :: invokeMethod(pWidget、 "hide"、Qt :: QueuedConnection); '。](http://doc.qt.io /qt-5/qmetaobject.html#invokeMethod)。 –

関連する問題