如何使用QWidget :: showEvent()防止QWidget :: show()

时间:2012-12-30 13:37:50

标签: events qt4 qwidget

我有一个QMainWindow来实例化一个QWidget子类。我想用远程数据填充我的子类,所以我想阻止QWidget::show()槽,忽略它并发出请求,然后真正显示子类窗口小部件。

我已重新实现showEvent(QShowEvent *)并忽略了该事件,qDebug()告诉我它有效且被忽略,但仍显示小部件。

我错过了什么? 谢谢你的帮助。

子类:

void Groups_Materials::showEvent(QShowEvent *event)
{
 event->ignore();
 qDebug() << "Event accepted: " << event->isAccepted(); // Return: false
}

如何调用:

this->m_groupsMaterialsWidget = new Groups_Materials(this->m_parent);
this->m_groupsMaterialsWidget->setWindowModality(Qt::ApplicationModal);
this->m_groupsMaterialsWidget->setAttribute(Qt::WA_DeleteOnClose);
this->m_groupsMaterialsWidget->show();

调用这些方法时,控制台中写了什么: Event accepted: false

2 个答案:

答案 0 :(得分:1)

添加«event-&gt; spontaneous()»,如果它返回«true»,你就是不能

  

随后发布了窗户的自发展示事件。

只需在你的QWidget子类上调用«hide()»,这样除非你自己调用«show()»,否则不会显示它。

答案 1 :(得分:0)

我单独得到一个答案......我正在使用“Qt :: Sheet”标志,这似乎使它失败了。 我在Mac上,也许它适用于Win / Linux:Qt-Forum