Seite 1 von 1

Designercode Qt 4.4 / 4.3.4

Verfasst: 7. Juli 2008 08:54
von pfid
Hallo,

ich habe in meinem Programm u. A. auch ein Fenster das mit dem QtDesigner erzeugt wurde. Im Designer wurden auch 2 Layouts gesetzt. Zusätzlich greife ich im Programm noch an anderen Stellen auf das Layout zu, da ich u. A. nachträglich Widgets hinzufügen möchte.

Nun habe ich das Problem, dass der Qt-Designer bzw. make bei Qt 4.4 und 4.3.4 unterschiedlichen Code ausspuckt, was die Bezeichnung des Layouts angeht.

Qt 4.3.4:

Code: Alles auswählen

~/] grep -i layout myclass.ui
   <layout class="QGridLayout" >
       <layout class="QVBoxLayout" name="verticalLayout" >
       </layout>
       <layout class="QVBoxLayout" name="verticalLayout_2" >
       </layout>
   </layout>
~/] qmake-qt4
~/] make 
~/] grep -i layout ui_myclass.h
#include <QtGui/QGridLayout>
#include <QtGui/QVBoxLayout>
    QGridLayout *gridLayout;
    QVBoxLayout *vboxLayout;
    QVBoxLayout *vboxLayout1;
    gridLayout = new QGridLayout(centralwidget);
    gridLayout->setSpacing(6);
    gridLayout->setMargin(9);
    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
    vboxLayout = new QVBoxLayout(tabTasks);
    vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
    vboxLayout->addWidget(splitter_2);
    vboxLayout1 = new QVBoxLayout(tabBugs);
    vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
    vboxLayout1->addWidget(frameBugsOptions);
    gridLayout->addWidget(tabWidget, 0, 0, 1, 1); 
Qt 4.4:

Code: Alles auswählen

~/] grep -i layout myclass.ui 
   <layout class="QGridLayout" >
       <layout class="QVBoxLayout" name="verticalLayout" >
       </layout>
       <layout class="QVBoxLayout" name="verticalLayout_2" >
       </layout>
   </layout>
~/] qmake-qt4
~/] make
~/]  grep -i layout ui_myclass.h
#include <QtGui/QGridLayout>
#include <QtGui/QVBoxLayout>
    QGridLayout *gridLayout;
    QVBoxLayout *verticalLayout;
    QVBoxLayout *verticalLayout_2;
    gridLayout = new QGridLayout(centralwidget);
    gridLayout->setSpacing(6);
    gridLayout->setMargin(9);
    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
    verticalLayout = new QVBoxLayout(tabTasks);
    verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
    verticalLayout->addWidget(splitter_2);
    verticalLayout_2 = new QVBoxLayout(tabBugs);
    verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
    verticalLayout_2->addWidget(frameBugsOptions);
    gridLayout->addWidget(tabWidget, 0, 0, 1, 1);
Es versteht sich von selbst, dass ich nun im Code kein einfaches
verticalLayout_2->addWidget()
mehr machen kann.

Gibt es einen bestimmten Grund, wieso der Designer das auf einmal anders benennt? Oder einen Workaround? Würde es genügen wenn ich das Layout im .ui File umbenenne? Wäre dann halt umsonst wenn ich das nächste mal im Designer das Layout anpasse.

Verfasst: 14. Juli 2008 23:46
von Thorsten
Gib dem Layout einfach einen aussagekräftigen!!! Namen im designer. Wenn du das Objekt im designer löscht, geht natürlich auch der Name verlohren. Das ist aber sicher besser, als sich auf irgendwelche automatisch erzeugten Namen zu verlassen.

Verfasst: 15. Juli 2008 07:13
von macman
Thorsten hat geschrieben:Gib dem Layout einfach einen aussagekräftigen!!! Namen im designer.
Oh, das geht wieder? Tatsächlich, aber nur bei Qt4.4, bei Qt4.3 geht das nicht. Wurde auf jeden Fall langsam Zeit.

Verfasst: 15. Juli 2008 08:57
von pfid
Hm, also die Option gibts bei mir nicht. Wenn ich im Designer eine neue Dialog-Vorlage erstelle, ein Layout zuweise, und in die leere Fläche klicke, habe ich im Eigenschafts-Fenster unten (in rot) das Layout stehn.

In meinem Programm (bzw. dem entsprechenden .ui File) kann ich aber klicken wo ich will, nirdens bekomm ich ein Layout zum umbenennen.

Naja, jetzt weiß ich jedenfalls mal, dass es geht. Ich werd noch ein bisschen rumklicken, vielleicht treff ich die Stelle irgendwann.
Bin übrigens immer noch der Meinung, dass der Designer ein ziemlicher Schmerz ist. Da bau ich das Layout lieber von Hand... :?