QObject::findChildren<>() Frage
Verfasst: 15. Oktober 2009 17:10
Hallo,
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
OwnSpecialObject
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
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)
{
}
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)
{
}