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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.