QT QDialog instance soll nur einmal geöffnet werden können

OP #5298144
Lesenswert?

Hallo Leute,
in meinem Programm wird per Button ein QDialog geöffnet.
1
calculator_widget = new calculator(this);
2
calculator_widget->show();

jetzt ist es jedoch möglich öfters auf diesen Button zu drücken und den 
Dialog dementsprechend öffters darzustellen.
Dies würde ich gerne unterbinden.

Ich verwende übringens
1
show()
 da dass ganze NICHT MODAL
sein soll!


Gibt es einen eleganten Weg zu prüfen ob das Dialog-Fenster bereits 
geöffnet ist?
#5298204
Lesenswert?

Freddi schrieb:
> calculator_widget = new calculator(this);
>
> nur einmal ausführen , stichwort Flag

Ein Flag braucht man eigentlich nicht. Man ruft einfach show() auf, wenn 
der Button gedrückt wird. Wird der Dialog schon angezeigt, passiert bei 
show() einfach nix.
Man könnte den Button auch togglebar machen, so dass beim Einschalten 
der Dialog angezeigt und beim Ausschalten wieder versteckt wird.
OP #5298803
Lesenswert?

Rolf M. schrieb:
> Ein Flag braucht man eigentlich nicht. Man ruft einfach show() auf, wenn
> der Button gedrückt wird. Wird der Dialog schon angezeigt, passiert bei
> show() einfach nix.

Danke für zahlreichen Antworten :)

Das ist zwar so korrekt leider wird die Instance durch "X" zerstört.
Somit kann ich nur einmal das Fenster öffnen. Nach dem Beenden und 
erneutem starten gibt es dann einen Fehler da "show()" ausgeführt werden 
soll aber keine instance mehr da ist.

Zum Thema Flag:
Daran habe ich auch schon gedacht. Allerdings dachte ich dass es eine 
"bessere" Methode gibt. Gerade bei QT.
OP #5298883
Lesenswert?

Kleines Update:
Ich habe es vorerst mit einem Flag umgesetzt.

Auf meinem WIN7 PC auf dem auch kompaliert wurde ist alles super.

Auf dem WIN10 PC funktioniert das mit dem Flag nicht zuverlässig!
Manchmal geht das Fenster auf und manchmal nicht. Scheint als würde asd 
Flag nicht zurück gesetzt werden. Vorsorglich mach ich dies im 
CloseEvent aber.
#5299002
Lesenswert?

Du könntest dein calculator-Widget als Singleton implementieren. Klingt 
hochtrabend, ist aber effektiv nur ein kleiner Wrapper mit internem 
("static") Speicher, der die Instanz entweder wirklich neu erzeugt, wenn 
sie noch nicht existiert oder sie nur zurückliefert, falls doch.
Gast #5299008
Lesenswert?

>> Qt::WA_DeleteOnClose wegnehmen....
>
> Die möglichkeit des Weg-"X"en möchte ich geben! Wollte kein Button in
> das Fenster setzen.

Das hab ich doch auch gar nicht vorgeschlagen. Doku Lesen!

Dein Problem war, dass das Dialog-Objekt gelöscht wird, sobald es 
geschlossen wird.
Wegnehmen dieses Flags schaltet genau das ab: Wenn der Dialog 
geschlossen wird (egal ob über "X" oder Enter/Escape-Taste oder Button 
oder sonstwie), wird dein Objekt eben nicht mehr gelöscht, und du kannst 
den Dialog ein zweites, drittes, viertes, ... mal per "show()" 
darstellen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren