C++ Qt: Label wandern lassen

Zuse1

Ensign
Registriert
Juni 2018
Beiträge
246
Tag zusammen,

ich habe einen kleinen Code geschrieben, der ein Label mehrmals von oben nach unten wandern lassen soll.
Zuerst habe ich es versucht indem ich das Label per Code erzeuge und dann mittels Schleife wandern lasse. Leider funktioniert das nicht.
Nach einigem rumprobieren habe ich es geschafft, mit fast dem gleichen Code das Label wandern zu lassen. Der einzige unterschied ist jedoch, dass ich das Label mit dem Qt Designer erstellt habe und nicht im Code. Nun frage ich mich, wieso funktioniert die Variante 2, aber die Variante 1 nicht?

Hier einmal der nicht funktionirende Code (Variante 1):
C++:
    QLabel *lbl = new QLabel(this);
    lbl->setText("Hallo");
    lbl->setGeometry(20, 10, 30, 10);

    //zählt die Runden und gibt sie aus (nur zu Testzwecken)
    QLabel *lblRunden = new QLabel(this);
    lblRunden->setGeometry(60, 20, 30, 10);
    lblRunden->setText("");


    int hoehe = 0;
    int runden = 0;


    int hoeheForm = this->size().height();



    while(runden < 10)
    {
        if(hoehe < hoeheForm)
        {

            lbl->setGeometry(20, hoehe, 30, 10);
            hoehe++;
            repaint();
        }
        else
        {
            hoehe = 0;
            repaint();
            runden++;
            lblRunden->setNum(runden);  //zu Testzwecken
        }
    }


Und hier der funktionierende Code (Variante 2):
C++:
 int hoehe = 0;
    int runden = 0;


    int hoeheForm = this->size().height();



    while(runden < 10)
    {
        if(hoehe < hoeheForm)
        {

            ui->label->setGeometry(20, hoehe, 30, 10);
            hoehe++;
            repaint();
        }
        else
        {
            hoehe = 0;
            repaint();
            runden++;
        }
    }

Vielleicht kann mir jemand erklären warum die Variante 2 funktioniert und die Variante 1 nicht. Vielen Dank
 
Naja ohne es exakt beantworten zu können wird der Fehler in Code stecken, den wir eben nicht sehen, da der gepostete Code ja sehr ähnlich ist.

Der QtDesigner macht notwendige Dinge automatisch, die du evtl. nicht bei deinem eigenen Label getan hast. Dh durch das hinzufügen vom Label mit Designer wird dieses in autogenerierten Dateien auch irgendwie abgehandelt. Sorry, dass ich es nicht konkreter beantworten kann.
Man hat ja .h, .cpp und .ui. Durch den Designer werden aber noch auf Basis der .ui auto-generierte Dateien erzeugt. Wenn du die Label Manuell einem Widget hinzufügen möchtest, musst du das dafür notwendige manuell machen.

Um mal konkreter zu raten:
https://stackoverflow.com/questions/26300293/adding-a-qlabel-to-a-qwidget

Hast du es zB einem Layout hinzugefügt?

Ich würde generell empfehlen
  • Alles bzw so viel wie möglich mit dem Designer zu machen
  • Keine absoluten Pixel-Positionen zu nutzen sondern Layouts. Die machen einem das Leben schon sehr früh viel einfacher - selbst wenn einem zB Skalierbarkeit der UI erstmal egal ist.
 
Danke sehr für Eure Antworten. Sobald ich genug Zeit finde, setze ich mich ran und melde mich dann nochmal
 

Ähnliche Themen

Zurück
Oben