Ich habe Unterklasse, um Funktionalität ähnlich QMessageBox
zu implementieren (ich brauchte dies für die Anpassung zu ermöglichen). Es hat eine Textnachricht und OK, Abbrechen-Tasten. Ich zeige den Dialog mit exec()
, um es zu blockieren. Wie gebe ich nun Werte von "Wahr/Falsch" zurück, wenn der Benutzer auf "OK/Abbrechen" klickt?QDialog exec() und bekommen Ergebniswert
Ich habe versucht, um die Tasten zu setResult()
verbinden und dann, geben den Wert Ergebnis, wenn geklickt, aber 1. Anklicken des Buttons 2. den Wert Rückkehr wird das Dialogfeld falsch nicht schließen. Folgendes ist der Code, den ich geschrieben habe. Ich denke, ich liege falsch im exec/Ergebnis Teil - aber ich bin mir nicht sicher, wie ich es beheben soll.
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());
}
};
Der Benutzer wird die Klasse instanziiert und rufen showYourself(), die den Wert zurückgeben wird erwartet, und auch in der Nähe (und löschen), um den Dialog.
Ich habe Teilcode veröffentlicht. Lass es mich wissen, wenn du mehr brauchst und ich werde die komplette Version veröffentlichen.
Vielen Dank! Das ist aufschlussreich. Wenn ich das mache, muss ich das Objekt explizit löschen oder wird es intern erledigt? – go4sri
Wenn das Objekt ein Elternelement hat, wird es gelöscht, wenn das Elternelement gelöscht wird. Sie können 'QObject :: deleteLater()' verwenden, um einen Löschvorgang zu planen. Wenn Sie sicher sind, dass ein Objekt nicht mehr verwendet wird (kein Ereignis, das mit diesem Objekt in Verbindung steht), können Sie das gute alte Löschen verwenden. – UmNyobe
sehr gute Antwort! Danke! – Victor