Grundlagenfrage



  • Hallo.

    Bei meiner Frage bin ich mir leider nicht sicher, ob es eine reine C++ oder Qt Frage ist. Allerdings arbeite ich zurzeit mit Qt und deswegen poste ich meine Frage hier.

    Ich habe eine Header-Datei und eine dazugehörige C++-Datei. Ich möchte die Breite (in Pixeln) meines Monitor in eine int-Variable speichern. Es klappt soweit alles gut. Wenn ich jedoch meine int-Vaiable in der Header-Datei definiere, stürzt mein Programm ab, sobald ich die Breite in meiner Variable speichere.

    Header-Datei:

    public:
    //Variablen
    int X_Wert;
    

    C++Datei (der Slot enthält bis jetzt keinen weiteren Code.):

    QDesktopWidget desktopWidget;
    MAX_X_Wert = desktopWidget.geometry().width();
    

    Das Problem habe ich bei mir gelöst, sodass es mir passt, dennoch möchte ich verstehen, warum diese Weise mein Programm zum Absturzt bringt.

    Falls jemand es mir erklären könnte oder sogar ein Webseite kennt, die mich über meine Frage aufklärt, wäre ich sehr dankbar.

    Gruß


  • Mod

    Werf im QtCreator mal den Debugger an, der dürfte dir zeigen wo es hakt.
    Ich weiss nicht ob das DesktopWidget so korrekt initialisiert ist, kann sein dass du da in ein Assert reinläufst...

    In der Doku steht dass du das über QApplication anfragen solltest:
    http://qt-project.org/doc/qt-5.1/qtwidgets/qdesktopwidget.html#details



  • Du darfst kein neues QDesktopWidget anlegen sondern musst es von QApplication holen.

    QDesktopWidget *dw = QApplication::desktop();
    MAX_X_Wert = dw->screenGeometry().width();
    


  • Danke an für die Antworten!

    Ich muss aber sagen, dass

    QDesktopWidget * desktopWidget = new QDesktopWidget;
    

    funktioniert. (Also ohne QApplication, obwohl das mit QApplication mir bekannt ist)

    Irgendwie habe ich das Gefühl, dass sobald ich meine int-Variable in der Header deffiniere, der Fehler auftaucht.

    Gruß



  • na dann nimm mal keine Member-Variable der Klasse sondern lege den Int innerhalb der Funktion an und weise den Wert zu.


Anmelden zum Antworten