Seite 1 von 1

QObject::findChildren<>() Frage

Verfasst: 15. Oktober 2009 17:10
von Chris81T
Hallo,

Code: Alles auswählen

    QWidget *w = new QWidget();
    QWidget *c1 = new QWidget(w);
    QWidget *c2 = new QWidget(w);
    QWidget *c3 = new QWidget(w);
    QPushButton * p1 = new QPushButton(w);
    QPushButton * p2 = new QPushButton(c2);

    QList<QPushButton*> buttonlist = w->findChildren<QPushButton*>();

    OwnObject *o = new OwnObject();
    OwnObject *co1 = new OwnObject(o);
    OwnObject *co2 = new OwnObject(o);
    OwnObject *co3 = new OwnObject(o);
    OwnSpecialObject s1 = new OwnSpecialObject(o);
    OwnSpecialObject s2 = new OwnSpecialObject(co2);

    QList<OwnSpecialObject*> speciallist = o->findChildren<OwnSpecialObject*>();

    int countButtonlist = buttonlist.count();     // = 2
    int countSpeciallist = speciallist.count();     // = 7
Ich rufe auf dem QWidget w die findChildren Funktion auf und möchte alle QPushButton-Kinder erhalten. Es funktioniert und erhalte in meiner Liste buttonList zwei Einträge auf die gefunden QPushButtons

Aber bei meinen eigenen Klassen habe ich ein Problem.

OwnObject erbt von QObject, sowie OwnSpecialObject von OwnObject erbt. Wenn ich auf Object o das findChildren aufrufe, um nur alle OwnSpecialObject Objekte zu erhalten, bekomm ich wesentlich mehr Einträge zurück.

Warum ist das so? Von Prinzip ist es doch die gleiche Struktur wie beim QPushButton und QWidget?!

OwnObject

Code: Alles auswählen

#ifndef OWNOBJECT_H
#define OWNOBJECT_H

#include <QObject>

class OwnObject : public QObject
{
    Q_OBJECT
public:
    OwnObject(QObject *parent=0);
};

#endif // OWNOBJECT_H

#include "ownobject.h"

OwnObject::OwnObject(QObject *parent) : QObject(parent)
{
}
OwnSpecialObject

Code: Alles auswählen

#ifndef OWNSPECIALOBJECT_H
#define OWNSPECIALOBJECT_H

#include "ownobject.h"

class OwnSpecialObject : public OwnObject
{
public:
    OwnSpecialObject(QObject *parent=0);
};

#endif // OWNSPECIALOBJECT_H

´#include "ownspecialobject.h"

OwnSpecialObject::OwnSpecialObject(QObject *parent) : OwnObject(parent)
{
}

Verfasst: 15. Oktober 2009 18:42
von Christian81
Bei OwnObject funktioniert qFindChildren<>, bei OwnSpecialObject nicht da Q_OBJECT fehlt.

Verfasst: 16. Oktober 2009 08:13
von Chris81T
Ja, das war's auch. Danke