是否有可能从其他线程隐藏qt小部件窗口?

时间:2017-03-18 15:16:27

标签: c++ multithreading qt

是否可以从其他线程隐藏qt小部件窗口?
例如,如果使用ptr->window->hide();
 从其他线程崩溃错误:

  

无法将事件发送到其他线程拥有的对象...

在这种情况下应该使用信号和插槽还是更容易。替代?

1 个答案:

答案 0 :(得分:2)

  

是否可以从其他线程隐藏Qt小部件窗口?

当然,您只需要将工作线程上的信号与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();
}