2012-12-30 53 views
1

我有一個QMainWindow實例化QWidget子類。我想用遠程數據填充我的子類,所以我想阻止QWidget::show()插槽,忽略它併發出請求,然後真正顯示子類小部件。如何防止QWidget :: show()與QWidget :: showEvent()

我已經重新執行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

回答

1

添加«事件 - >自發的() »,如果它返回«true»,您就不能

窗戶的自發表演事件隨後發送。

只要在你的QWidget子類上調用«hide()»,它就不會顯示,除非你自己調用«show()»。

+0

不幸的是:'qDebug()<<「顯示事件是自發的:」<< event-> spontaneous();'打印'顯示事件是自發的:false' ...所以我會嘗試你的建議。 – Max13

0

我得到了一個單獨的...我使用「Qt :: Sheet」標誌,這似乎使它失敗。我在Mac上,也許它會在Win/Linux上工作:Qt-Forum