Если ваша цель состоит в том, чтобы одновременно отображалось не более одного QMessageBox, вы можете убедиться в этом в своем коде с помощью чего-то вроде этого:
static QMessageBox * openMBox = NULL;
void MyClass :: showMessageBox()
{
if (openMBox) return; // don't open a new QMessageBox if we already have one open!
openMBox = new QMessageBox(args here...);
connect(openMBox, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(userClickedButton(QAbstractButton*)));
openMBox->show();
}
void MyClass :: userClickedButton(QAbstractButton * button)
{
if (openMBox)
{
// [code to handle button-click result could go here]
openMBox->deleteLater();
openMBox = NULL;
}
}
Обратите внимание, что showMessageBox()
фактически создаст новый QMessageBox
, только если openMBox
НЕДЕЙСТВИТЕЛЕН, то есть только в том случае, если еще нет сообщения.
(Код вызывает deleteLater()
в методе userClickedButton()
вместо использования оператора удаления, поскольку вполне вероятно, что метод userClickedButton()
сам вызывается из метода объекта QMessageBox
, поэтому мы не не хочу удалять объект QMessageBox
до тех пор, пока он не будет в середине вызова метода)