Seite 1 von 1

SpacerItem in einem QWidget fehlt als Children

Verfasst: 22. Juni 2011 19:37
von BDahl
Hi,
ich habe folgendes Problem:
ich habe im QT Designer ein Widget(MasterWidget) zusammenbastelt(das Widget hat ein QVBoxLayout als Layoutmanager und beinhaltet ein Vertical Spacer).
Nun füge ich Programmatisch andere Widgets ein und wollte mir alle Childs meines Widget anzeigen lassen.
Dazu habe ich folgenden Code Verwendet:
Kurze Erklärung zum Code ich iteriere über alle child pointers des Masterwidgets und lasse mir die classname ausgeben.

Code: Alles auswählen

QObject *curObj;
    QList<QObject*> Childrens=m_pUi->scrollAreaWidgetContents->children(); //Hole eine Liste mit allen QObject* aus den Master Widget
    QList<QObject*>::iterator i;
   log(true,QString("Start Logging\n"));
    for(i=Childrens.begin();i!=Childrens.end();i++)
    {
        curObj=qobject_cast<QObject*>(*i);
        if(curObj)
        {
            log(true,QString(curObj->metaObject()->className()));
        }
    }
Da erhalte ich alle Childs aber keine SpacerItem angezeigt. Laut Doku ist aber SpacerItem von QObject abgeleitet. Kann mir jemand sagen
a) warum werden die nicht angezeigt
b) wie kann ich alle Childs (inkl. Spacer) in der Reihenfolge anzeigen lassen wie die eingehängt worden sind.

Danke für die Hilfe

Verfasst: 23. Juni 2011 20:14
von Troll.Soft
Hast Du schon mal diese Funktionen von Qt probiert?

Code: Alles auswählen

void QObject::dumpObjectInfo ()
Dumps information about signal connections, etc. for this object to the debug output.
This function is useful for debugging, but does nothing if the library has been compiled in release mode (i.e. without debugging information).
See also dumpObjectTree().
void QObject::dumpObjectTree ()
Dumps a tree of children to the debug output.
This function is useful for debugging, but does nothing if the library has been compiled in release mode (i.e. without debugging information).
See also dumpObjectInfo().
Da muß man nicht soviel programmieren und was in dem Output nicht dabei ist, existiert wahrscheinlich auch nicht.
tschüß
Troll.Soft

Verfasst: 27. Juni 2011 10:53
von BDahl
hmm... irgendwie gibt er da nix aus...
Wie kann ich zur Ausgabe kommen? (P.S. ich kann nicht die QT Libs im debug modus installieren!!!)

Verfasst: 27. Juni 2011 15:17
von Christian81
Minimal kompilierbares Beispiel bitte. Ich schätze scrollAreaWidgetContents ist nicht das Haupt-Widget bzw. der Spacer ist kein Child von scrollAreaWidgetContents.

Verfasst: 27. Juni 2011 16:42
von archer
Ein QSpacerItem ist nach meiner Doku (4.7) von QLayoutItem abgeleitet und nicht von QObject.

Verfasst: 28. Juni 2011 17:19
von BDahl
@archer: Ja aber QLayoutItem ist laut meiner Doku ist QlayoutItem von QObject abgeleitet. in C++ gibts die Mehrfachvererbung, ist die für QT elemente ausgehebelt?

Verfasst: 29. Juni 2011 07:37
von Troll.Soft
BDahl hat geschrieben:@archer: Ja aber QLayoutItem ist laut meiner Doku ist QlayoutItem von QObject abgeleitet. in C++ gibts die Mehrfachvererbung, ist die für QT elemente ausgehebelt?
In der Tat ist die Mehrfachvererbung bei Qt teilweise ausgehebelt. Aber nur wenn QObject beteiligt ist, es darf nur einmal vorkommen. Ein kurzer Blick in die Doku überzeugte mich davon, das in der QSpacer - Linie kein QObject vorkommt.

P.S.: Wie arbeitest Du ohne Debugger und warum ?

tschüß
Troll.Soft

Verfasst: 29. Juni 2011 09:11
von Christian81
Wenn mir jetzt noch einer erkläre könnte wo hier Mehrfachvererbung vorliegt wäre es nicht schlecht. Ein minimales Beispiel haben wir immer noch nicht gesehen...