我正在 SBC6000x 板上开发 Qt 应用程序(Qt 版本 4.7.3)。
我有一个从 QDialog 派生的 MessageBox 类。我已经将这个类设为单例。
每当要显示消息框时,我都会使用 .exec 方法来显示它。
我需要一个接一个地显示消息框的地方很少。
所以,要显示新的消息框,我必须关闭前一个并显示新的。
例如,当消息框打开时,同时我从后台收到错误消息,我必须关闭当前显示的消息框并显示有错误的消息框。
为了关闭上一个对话框,我从 messagebox 类中公开了 CloseDlg 方法并尝试关闭它。
在这个 CloseDlg 中,我正在发出完成的信号。
void CMsgBox::CloseDlg()
{
if (NULL != CMsgBox::m_msgBox)
{
if(CMsgBox::m_msgBox->isVisible())
{
emit CMsgBox::m_msgBox->finished(0);
//QApplication::processEvents();
}
}
}
并将其称为
CMsgBox::CloseDlg();
我的表演方法是:-
int CMsgBox::showMsgBox(Icon icon, const QString &textMsg, const QString &okBtnText)
{
if (CMsgBox::m_msgBox == NULL)
{
CMsgBox::m_msgBox = new CMsgBox();
}
CMsgBox::m_msgBox->setText(textMsg);
CMsgBox::m_msgBox->setIcon(icon);
CMsgBox::m_msgBox->setOkBtnText(okBtnText);
CMsgBox::m_msgBox->exec();
return CMsgBox::m_msgBox->m_btnPressed; //return, unblock the call
}
当我再次调用 showMsgBox 时,它会向我显示以下警告。QDialog::exec:检测到递归调用
问题是,它不会从先前的 exec 调用中返回(除非我们返回,如上文所述 //)。
我尝试使用 close()、accept()、reject() 方法而不是 finished() 事件,但没有任何效果。
从以前的 exe 调用返回并实现上述场景的方法是什么?欢迎任何帮助。