1

我有一个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

4

2 回答 2

1

添加« event->spontaneous() »,如果它返回« true »,您就不能

窗口的自发展示事件随后交付。

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

于 2012-12-30T17:00:42.897 回答
0

我一个人得到了一个anwser......我正在使用“Qt::Sheet”标志,这似乎使它失败了。我在 Mac 上,也许它可以在 Win/Linux 上运行:Qt-Forum

于 2012-12-31T15:18:04.550 回答