Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] Вызов диалога о сохранении


Автор: Serbis 14.3.2008, 23:31
Помогите найти ляп. Есть функция выводящая предупреждение о том что документ не сохранен, основывающаяся на переменной textChanged, если она равна нулю то вернуть true что должно привести к игнорированию вывода сообщения, если же там число не равное нулю должно быть выдан диалог. Функция вызывается в переопределенном обработчике события QCloseEvent. Ожидаемой функциональности не видно, диалог выводится с полной функциональностью даже при textChanged = = 0.
Код

bool MainWindow::okToContinue()
{
    int r = QMessageBox::warning(this, tr("NFL"),
                    tr("Документ не был сохранен.\n"
                       "Сохранить документ?"),
                    QMessageBox::Yes | QMessageBox::Default,
                    QMessageBox::No,
                    QMessageBox::Cancel | QMessageBox::Escape);

    if (textChanged == 0) {
        return true;
    } else {
        if (r == QMessageBox::Yes) {
            return save();
        } else {
            if (r == QMessageBox::Cancel) {
                   return false;
            }
        }
    }
}

Код

oid MainWindow::closeEvent(QCloseEvent *event)
{
    if (okToContinue()) {
        event->accept();
    } else {
        event->ignore();
    }

Автор: SABROG 14.3.2008, 23:41
 smile  молодца, по сути выложил код с проверкой if. А главную часть, где textChanged меняется видимо нам самим домысливать надо... Все-равно что запустить программу и не получив желаемого прийти на форум и спросить "я ее запустил, а она не работает, запускал так: program.exe"

Автор: creatorcode 14.3.2008, 23:53
Может так?
Код

bool MainWindow::okToContinue()
{
    if (textChanged == 0) {
        return true;
    } else {
        int r = QMessageBox::warning(this, tr("NFL"),
                    tr("Документ не был сохранен.\n"
                       "Сохранить документ?"),
                    QMessageBox::Yes | QMessageBox::Default,
                    QMessageBox::No,
                    QMessageBox::Cancel | QMessageBox::Escape);
        if (r == QMessageBox::Yes) {
            return save();
        } else {
            if (r == QMessageBox::Cancel) {
                   return false;
            }
        }
    }
}

Автор: nawok78 19.3.2008, 08:14
тогда уж так (ты забыл про "Нет"):
Код

bool MainWindow::okToContinue()
{
    if (!textChanged ) 
        return true;
    switch (QMessageBox::warning(this, tr("NFL"),
                    tr("Документ не был сохранен.\n"
                       "Сохранить документ?"),
                    QMessageBox::Yes | QMessageBox::Default,
                    QMessageBox::No,
                    QMessageBox::Cancel | QMessageBox::Escape))
   {
          case QMessageBox::Yes: return save();
          case QMessageBox::No: return true;
          default : return false; //На тот случай если он просто закрыл диалог (нажал Х)
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)