QWidget和QMessageBox的显示

时间:2012-07-19 06:32:59

标签: c++ qt qmessagebox

我有一个QWidget,它在show事件中显示一个QMessageBox。我已经覆盖了QWidget的showEvent函数。问题是,首先显示消息框,稍后显示小部件的其余部分。我该如何解决这个问题?

void InstallScreen::showEvent( QShowEvent *s )
{ 
   QMessageBox::about( m_main, "One Click Installer", 
          QString( "The following repositories will be added \n %1" ).arg( repoList ) ); 
   QMessageBox::about( m_main, "One Click Installer", 
          QString( "The following packages will be installed \n %1" ).arg( packList ) ); 
} 

1 个答案:

答案 0 :(得分:2)

使用延迟调用来显示小部件,例如将小部件显示代码放在插槽中并使用QTimer :: singleShot调用它,延迟为0秒。

这将允许showEvent完全处理并在显示您的小部件之前在主界面上安排任何重绘事件。这将使小部件和&消息框彼此独立显示/绘制/重新绘制。

protected:
void MyWidget::showEvent(...) {
     ...
     QTimer::singleShot(0, this, SLOT(showMessageBox());
}

private slots:
void MyWidget::showMessageBox() {
     QMessageBox::information(...); // or whatever
}

如果您需要一些额外的余量(无论出于何种原因),请将定时器延迟设置为50或100 ms。