Как скрыть кнопку «Отмена» в QInputDialog в QT с использованием C ++? - PullRequest
3 голосов
/ 12 сентября 2009
#include <QtGui>

int main (int argc, char* argv[]) 
{ 
    QApplication app(argc, argv); 
    QTextStream cout(stdout, QIODevice::WriteOnly);     

    // Declarations of variables
    int answer = 0; 

    do {
        // local variables to the loop:
        int factArg = 0;
        int fact(1);
        factArg = QInputDialog::getInteger(0, "Factorial Calculator",
            "Factorial of:");
        cout << "User entered: " << factArg << endl;
        int i=2;
        while (i <= factArg) {
            fact = fact * i;
            ++i;
        }
        QString response = QString("The factorial of %1 is %2.\n%3")
            .arg(factArg).arg(fact)  
            .arg("Do you want to compute another factorial?");    
        answer = QMessageBox::question(0, "Play again?", response,
            QMessageBox::Yes | QMessageBox::No ,QMessageBox::Yes); 
    } while (answer == QMessageBox::Yes);

    return EXIT_SUCCESS;
}

В этой программе у меня нет окна ввода (4-я строка цикла do-while) для кнопки отмены. Как я могу это сделать? Я только начал изучать QT. Так что извините, если это очень простой вопрос.

А также как мне использовать кнопку отмены, чтобы остановить приложение. Bcos, прямо сейчас кнопка ОТМЕНА ничего не делает.

Ответы [ 3 ]

5 голосов
/ 12 сентября 2009

QInputDialog предоставляется в качестве удобного класса, который обеспечивает быстрый и простой способ запроса ввода и, как таковой, не допускает особой настройки. Я не вижу ничего в документации, чтобы указать, что вы можете изменить расположение окна. Я бы предложил просто создать свой собственный диалог, расширив QDialog. Это займет больше времени, но позволит вам настроить форму.

Если вы хотите определить, была ли нажата кнопка отмены в QInputDialog, вы должны передать указатель на bool в функцию getInteger () в качестве 8-го аргумента.

do{
    bool ok;
    factArg = QInputDialog::getInteger(0, "Factorial Calculator", "Factorial of:",
                                       value, minValue, maxValue, step, &ok);
    if(!ok)
    {
        //cancel was pressed, break out of the loop
        break;
    }
    // 
    // Do your processing based on input 
    //
} while (some_condition);

Если ok возвращает false, пользователь нажимает кнопку отмены, и вы можете выйти из цикла. Вы можете увидеть, что значение, minValue, maxValue и step означают в документации: Документация QInputDialog

0 голосов
/ 15 января 2018

В редакторе свойств Qt Designer вы можете настроить свойство standardButtons -

enter image description here

Это позволит вам контролировать, какие диалоговые кнопки будут отображаться.

0 голосов
/ 11 августа 2015

Скрытие кнопки справки в QInputDialog работает путем передачи правильных флагов окна:

QInputDialog inputDialog;
bool ok;
inputDialog.setWindowFlags(inputDialog.windowFlags() & (~Qt::WindowContextHelpButtonHint));
QString text = inputDialog.getText(this, tr("Factorial Calculator"), 
                           tr("Enter some text:"), QLineEdit::Normal, QString(), &ok, 
                           inputDialog.windowFlags());

// Or for integers
int number = inputDialog.getInt(this, tr("Fractorial Calculator"), 
                         tr("Enter a number:"), 0, -10, 10, 1, &ok, 
                         inputDialog.windowFlags());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...