Qt: Как отобразить окно сообщений, когда вы находитесь внутри функции? - PullRequest
9 голосов
/ 09 марта 2011

Я занимаюсь разработкой с использованием Qt Nokia SDK.

У меня проблемы с отображением кнопок MessageBox при попытке отобразить окно сообщений внутри функции.Если я пытаюсь отобразить его в главном окне, нет проблем с отображением кнопок.

Главное окно состоит из QStackWidget, который содержит различные виджеты.

Вот код, который работает в основномокно:

QMessageBox msgBox;
msgBox.setText("Name");
msgBox.setInformativeText("Do you want to save your changes?");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard |
                          QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
int ret = msgBox.exec();

Вот функция и код, который я запускаю после получения ответа от веб-запроса (В окне сообщения отображаются, но не кнопки.

void MainWindow::RequestReceived()
{
    QMessageBox *msgBox = new QMessageBox(this);
    msgBox->setText("Test");
    msgBox->setWindowModality(Qt::NonModal);
    msgBox->setInformativeText("Do you want to save your changes?");
    msgBox->setStandardButtons(QMessageBox::Save | QMessageBox::Discard | 
                               QMessageBox::Cancel);
    msgBox->setDefaultButton(QMessageBox::Save);
    int ret = msgBox->exec();
}

Кто-нибудь получилПонятие о том, что происходит?

Заранее спасибо!

Ответы [ 3 ]

12 голосов
/ 07 ноября 2011

Попробуйте этот код. Он вам поможет.

QMessageBox Msgbox;
    int sum;
    sum = ui->textEdit->toPlainText().toInt()+ ui->textEdit_2->toPlainText().toInt();
    Msgbox.setText("sum of numbers are...."+sum);
    Msgbox.exec();
4 голосов
/ 20 мая 2016

Возможно, это поможет:

QMessageBox::StandardButton reply;

reply = QMessageBox::question(this, "Save", "Do you want to save your changes?",
    QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);

if (reply == QMessageBox::Save) {
    qDebug() << "Yes was clicked";
    // code for saving...
}
if (reply == QMessageBox::Discard)
{
    // toDo
}
if(reply == QMessageBox::Cancel)
{
    //toDo
}

Этот код выдаст следующее:

result

0 голосов
/ 11 мая 2011

Попробуйте изменить эту строку:

QMessageBox *msgBox = new QMessageBox(this);

до

QMessageBox *msgBox = new QMessageBox(0);
...