3 Stimmen

Wie kann ich feststellen, ob ein Dialog in Qt null ist?

Ich versuche, einen einfachen Dialog wie diesen zu zeigen:

if (!aboutDialog)
        aboutDialog = new AboutDialog(this);
    aboutDialog->exec();

Aus irgendeinem Grund funktioniert es nicht (aboutDialog hat einen Zeiger, obwohl er nicht initialisiert ist), die Überprüfung if (aboutDialog == 0) funktioniert auch nicht. Ich möchte die Instanz nicht jedes Mal erstellen, sondern nur einmal. Wie kontrolliere ich das richtig?

Danke!

3voto

Mat Punkte 195740

Sie müssen aboutDialog irgendwo explizit auf 0 initialisieren. Wahrscheinlich im Konstruktor der Klasse, zu der dieses Element gehört.

(!aboutDialog) ist ein korrekter Test.

Bedenken Sie Folgendes:

#include <iostream>

class Thing {
  void *data;
  public:
    Thing(){}
    void print() {
      std::cout << data << std::endl;
  }
};

int main()
{
  Thing t;
  t.print();
  return 0;
 }

Versuchen Sie, das zu kompilieren und mehrmals auszuführen. Die Chancen stehen gut, dass es jedes Mal etwas anderes ausgibt. Und warum? Weil data ist nicht initialisiert. Er enthält Müll. Die Wahrscheinlichkeit, dass es sich um einen Nullzeiger handelt, ist genauso groß wie bei 0x1234ABCD oder 42.

Um das zu beheben, data braucht irgendwo initialisiert werden muss. Der einfachste Weg ist hier, dies einfach in Thing Konstruktor wie unten:

Thing() : data(0) {}

0voto

Johannes Punkte 11026

Meine Antwort ist wahrscheinlich nicht die beste :) Ich benutze Qt mit Python, wo man (in Python) neue Attribute zu einer Klasse schreiben kann, wann immer man will, "von außen". Wenn möglich, würde ich eine Variable (wieder, vielleicht nicht die beste Praxis) auf einen Wert setzen, wenn Sie aboutDialog konstruieren. Dann können Sie später überprüfen, ob dieser Wert gesetzt ist. Wie eine Zustandsvariable oder so :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X