Widget automatisch erstellen lassen



  • @It0101 Also bei mir zickt der Compiler schon allein wegen dem auto Schlüsselwort rum.
    Aber ja ich teste mal ein bisschen rum^^



  • @It0101

    Das Beispiel ist zwar nur so aus dem Arm geschüttelt, aber sollte halbwegs funktionieren, wenn du z.B. in einer QMainWindow-Ableitung oder QWidget-Ableitung arbeitest oder etwas ähnlichem ( wegen des 'this' im Ctr von QVBoxLayout ). Ansonsten gehört in den Konstruktoraufruf vom Layout halt das übergeordnete Widget.

    Was genau muss ich in den Ctr eintragen? Ich schreibe das jetzt in "formstatus.cpp", heißt ja da muss stehen

    v= new QFrame(formStatus);
    

    Das erzeugt aber den Fehler " error C2275: 'formStatus': Ungültige Verwendung dieses Typs als Ausdruck".

    Wenn ich in der Ui-Datei arbeite wird "formStatusUi" eingetragen. Wenn ich das aber jetzt auch mache, kommt auch der Fehler "error C2275: 'Ui::formStatusUi': Ungültige Verwendung dieses Typs als Ausdruck". Heißt ja soviel wie ich kann Widgets nicht in der .cpp-Datei initialisieren oderwie? Oder gebe ich da nur das falsche an?



  • @bla1027
    QFrame erfordert im Konstruktor ein QWidget, daher solltest du rausfinden was "formStatus" für ein Typ ist.

    "auto" ist ein Schlüsselwort, welches im C++11-Standard dazu kam. Du musst vermutlich das hier

    QMAKE_CXXFLAGS += -std=gnu++11
    

    zu deinem ".pro"-File hinzufügen.



  • @It0101 Also wenn ich zB das hier mache

    for ( int i  = 0; i < 2; ++i )
    {
    	int x = i*50;
    
    	line0->setGeometry(QRect(61, 60+x, 31, 33));
    	line0->setStyleSheet(QString::fromUtf8("color: rgb(100,100,200);"));
    
    }
    

    Bekomme ich eine Anzeige von einem QFrame. Allerdings hätte ich in diesem Fall ja gerne zwei, einer über dem anderen. Wie ist das möglich? Ich muss scheinbar die Widgets im Ui-File initialisieren etc, ansonsten werden sie mir gar nicht angezeigt.



  • Den passenden Code hat @It0101 dir doch schon gezeigt.



  • @Th69 Wie oben bereits erwähnt, geht der nicht. Unter anderem weil addWidget kein Element von Qframe ist.



  • Du mußt ja auch das neu erstellte QFrame-Objekt einem Container (oder direkt dem QMainWindow) hinzufügen.



  • @Th69 was heißt das konkret?:D Sorry, bin tatsächlich doch noch ein blutiger Anfänger wie mir scheint



  • @Th69 @It0101 Ich möchte eine stackedbarchart schreiben, wie es sie in qt5.x gibt. Allerdings schaffe ich es nicht irgendwelche Dateien zu includen, entweder bin ich zu blöd oder die Server hier bei der Arbeit lassen das nicht zu. Vielleicht hilft das ja zum Verständnis für was ich die Schleife zum Zeichnen mehrerer Frames brauche..



  • Dieser Beitrag wurde gelöscht!


  • @bla1027 sagte in Widget automatisch erstellen lassen:

    Bekomme ich eine Anzeige von einem QFrame. Allerdings hätte ich in diesem Fall ja gerne zwei, einer über dem anderen. Wie ist das möglich? Ich muss scheinbar die Widgets im Ui-File initialisieren etc, ansonsten werden sie mir gar nicht angezeigt.

    Grundsätzlich musst du im UI-File gar nichts machen.

    Ich nutze folgende Vorgehensweise beim erzeugen von (dynamischen) Widgets/Objekten:

    1. Ein ParentWidget ( z.B. das CentralWidget von QMainWindow ), egal was, hauptsache QWidget.
    2. Dann Ein Layout, welches im Konstruktor das ParentWidget übernimmt:
    • horizontale Anordnung von Widgets: QHBoxLayout
    • vertikale Anordnung von Widgets: QVBoxLayout
    • gitterförmige Anordnung von Widget: QGridLayout
    1. "Child-"Widgets ( in meinem Beispiel die QLabel ) dem Layout per ->addWidget hinzufügen.
    2. setGeometry brauchst du eigentlich gar nicht, wenn du mit den Layouts arbeitest. Vorteil der Layouts: Du bist unempfindlich gegenüber Resize vom Fenster, oder gegenüber unsichtbar gemachten Widgets. Wenn du von den zehn Labels aus meinem Beispiel das erste(oberste) unsichtbar machst, dann rutschen die 9 weiteren nach oben, und wenn du das erste wieder sichtbar machst, rutschen die wieder nach unten. Wenn du mit setGeometry arbeitest, sind die Positionen fix.

    Zum anderen: das ist kein Drecksforum. Es kennt sich nur nicht jeder mit allem aus und man erkennt sehr schnell wer wirklich helfen will. Die paar Trolle kannst du einfach getrost ignorieren.
    Zum zweiten: QT ist am Anfang schwierig, aber wenn du das Prinzip erstmal verstanden hast, bietet es vielseitige Möglichkeiten und geht flott von der Hand.
    Man merkt schon dass du Anfänger bist, aber wenn du dran bleibst, wirst du schnell Fortschritte machen. Nur nicht entmutigen lassen.



  • @It0101
    Habs jetzt hinbekommen. Allerdings klappt das mit unserem tollen, schon bestehendem Programm irgendwie nicht, da wird ein neues Fenster einfach darüber erstellt. Naja, da muss ich wohl hier mal nachfragen und hoffen, dass der Ersteller nicht nur in Rente ist sondern auch noch lebt..
    Trotzdem vielen Dank, hat mir schonmal weitergeholfen.



  • @bla1027
    Glückwunsch. Etwas mehr Übung und die nächsten Probleme lösen sich von allein. QT ist eigentlich größtenteils pflegeleicht.


Anmelden zum Antworten