Statische QDialog

Verschiedenes zu Qt
Antworten
ralfwickum
Beiträge: 20
Registriert: 25. August 2015 13:29

Statische QDialog

Beitrag von ralfwickum »

Hallo,

da ich möchte dass ein QDialog ("MyDialog.ui") nur einmal im ganzen Programm vorkommt, greife ich auf diese Klasse im ganzen Programm mittels Singleton zu.

Dazu habe ich eine getInstance().

Code: Alles auswählen

  static MyDialog& getInstance(QWidget* parent = 0) {
    static MyDialog _myInstance(parent);
    return _myInstance;
  }
(Davor hatte ich den Zeiger dieser Klasse an alle anderen Klassen verteilt.)

Nach dieser Umstellung, kracht mein Programm, immer wenn ich die Applikation beenden möchte. Diese Klasse MyDialog hat nur eine nicht statische Membervariable in private deklariert. Ich gehe davon aus, dass mein es deswegen kracht?

Code: Alles auswählen

Ui::Mydialog* ui;
Soll ich das ui auch statisch machen? Weil mir der Compiler dann vorschlägt, constexpr zu verwenden..

Vielen Dank schonmal..
Ralf
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Statische QDialog

Beitrag von Christian81 »

Es liegt an der statischen Objekt-Instanz des Dialogs. Dieses wird wohl erst zerstört nachdem QApplication schon nicht mehr vorhanden ist und die Qt-Dll schon aus dem Speicher entfernt wurde. Die Reihenfolge der Zerstörung von statischen Variablen beenden ist nicht definiert.

Deshalb würde ich das Singleton als Pointer anlegen oder eine andere Lösung suchen. Singletons sind nicht unbedingt das Mittel der Wahl...

Code: Alles auswählen

static MyDialog *getInstance(QWidget* parent = 0)
{
  static MyDialog *_myInstance = 0;
  if (!_myInstance )
  {
    myInstance  = new MyDialog (parent);
  }
  return _myInstance;
}
QObject - Objekte als Referenz zu behandeln ist eh keine gute Idee...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ralfwickum
Beiträge: 20
Registriert: 25. August 2015 13:29

Re: Statische QDialog

Beitrag von ralfwickum »

Ok, thnx ich werd mir was überlegen.
Antworten