是否可以从其他线程隐藏qt小部件窗口?
例如,如果使用ptr->window->hide();
从其他线程崩溃错误:
无法将事件发送到其他线程拥有的对象...
在这种情况下应该使用信号和插槽还是更容易。替代?
答案 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();
}