0

我有一个 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 ) ); 
} 
4

1 回答 1

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 毫秒。

于 2012-07-19T06:36:57.700 回答