Come nascondere & # 8220; Annulla & # 8221; pulsante in QInputDialog in QT utilizzando C ++?
Domanda
#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;
}
In questo programma, non ho la finestra Input (4a riga del ciclo do-while) per avere il pulsante Annulla. Come lo faccio? Ho appena iniziato a studiare QT. Quindi, scusa se è una domanda molto semplice.
E anche come posso utilizzare il pulsante Annulla per interrompere l'applicazione .. Bcos, in questo momento il pulsante CANCEL non fa nulla.
Soluzione
QInputDialog è indicato come una classe di convenienza che fornisce un modo rapido e semplice per richiedere un input e, come tale, non consente molta personalizzazione. Non vedo nulla nella documentazione per indicare che è possibile modificare il layout della finestra. Suggerirei solo di progettare la tua finestra di dialogo estendendo QDialog. Questo richiederà più tempo, ma ti permetterà di personalizzare il modulo.
Se si desidera determinare se il pulsante Annulla è stato premuto in QInputDialog, è necessario passare un puntatore a un bool nella funzione getInteger () come ottavo argomento.
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);
Se ok ritorna come falso, l'utente ha fatto clic su Annulla e puoi uscire dal tuo ciclo. Puoi vedere cosa significano value, minValue, maxValue e step nella documentazione: QInputDialog document
Altri suggerimenti
Nascondere il pulsante Guida in un QInputDialog funziona passando la finestra correttaFlags:
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());