Come nascondere & # 8220; Annulla & # 8221; pulsante in QInputDialog in QT utilizzando C ++?

StackOverflow https://stackoverflow.com/questions/1414043

  •  06-07-2019
  •  | 
  •  

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.

È stato utile?

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());

Nell'editor delle proprietà di Qt Designer, è possibile personalizzare la proprietà standardButtons -

 inserisci qui la descrizione dell'immagine

Ciò dovrebbe consentire di controllare quali pulsanti di dialogo vengono presentati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top