QObject::findChildren<>() Frage

Alles rund um die Programmierung mit Qt
Antworten
Chris81T
Beiträge: 82
Registriert: 4. Mai 2008 00:06
Wohnort: Urbar

QObject::findChildren<>() Frage

Beitrag 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)
{
}
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Bei OwnObject funktioniert qFindChildren<>, bei OwnSpecialObject nicht da Q_OBJECT fehlt.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Chris81T
Beiträge: 82
Registriert: 4. Mai 2008 00:06
Wohnort: Urbar

Beitrag von Chris81T »

Ja, das war's auch. Danke
Antworten