Ho implementato la sottoclasse QDialog
per implementare funzionalità simili a QMessageBox
(ne avevo bisogno per consentire la personalizzazione). Ha un messaggio di testo e OK, pulsanti Annulla. Sto mostrando la finestra di dialogo usando exec()
per bloccarlo. Ora, come posso restituire i valori di vero/falso quando l'utente fa clic su OK/Annulla?QDialog exec() e ottenere il valore del risultato
Ho cercato di collegare i pulsanti per setResult()
e poi, riportare il valore del risultato quando si fa clic, ma 1. Facendo clic sui pulsanti non chiude la finestra di dialogo 2. il valore restituito non è corretto. Di seguito è riportato il codice che ho scritto. Penso di sbagliarmi nella parte exec/result - ma non sono sicuro di come risolverlo.
class MyMessageBox : public QDialog
{
Q_OBJECT
private slots:
void onOKButtonClicked(){ this->setResult(QDialog::Accepted);}
void onCancelButtonClicked(){ this->setResult(QDialog::Rejected);}
public:
MyMessageBox(QMessageBox::Icon icon, const QString & title, const QString & text, bool showCancelButton = true, QWidget *parent = 0);
virtual void resizeEvent(QResizeEvent* e);
QDialog::DialogCode showYourself()
{
this->setWindowModality(Qt::ApplicationModal);
this->exec();
return static_cast<QDialog::DialogCode>(this->result());
}
};
L'utente potrà creare un'istanza della classe e chiamare showYourself() che dovrebbe restituire il valore e anche vicino (e cancellare) la finestra di dialogo.
Ho inserito il codice parziale. Fatemi sapere se avete bisogno di più e pubblicherò la versione completa.
Grazie! Questo è illuminante. Se faccio questo, devo cancellare esplicitamente l'oggetto, o è gestito internamente? – go4sri
se l'oggetto ha un genitore viene eliminato quando il genitore viene eliminato. Puoi usare 'QObject :: deleteLater()' per pianificare un'eliminazione. Quando sai per certo che un oggetto non è più usato (nessun evento relativo a questo oggetto che gira intorno) puoi usare il buon vecchio delete. – UmNyobe
ottima risposta! grazie! – Victor