QObject提供了一些与子对象相关的机制。 这此用到的函数有: 1 QObject * parent () const 得到父对象指针 2 void setParent ( QObject * parent ) 设置父对象 3 const QObjectList & children () const 得到所有子对象 4 T findChild ( const QString & name = QString() ) const 得到某个子对象 5 QList<T> findChildren ( const QString & name = QString() ) const 得到某些子对象 6 QList<T> findChildren ( const QRegExp & regExp ) const 得到某些子对象 7 void setObjectName ( const QString & name ) 设置对象名称 8 QString objectName () const 得到对象名称 具体事项请看官方帮助文档,简要的例子请看下面例子。 例1: 文件 main.cpp GwObject.h GwObject.h 说明 这次主要东西都在main函数中,注释很明白。。。 GwObject中只是为了方便改了一点点构造函数。 代码 //main.cpp #include <QtCore/QCoreApplication> #include "GwObject.h" #include <QDebug> #include <QList> #include <QRegExp> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); //初始化 //定义了关系与名字 GwObject *g0,*g1,*g2,*g3,*g4,*g5,*g6; g0 = new GwObject(0,"A1"); g1 = new GwObject(g0,"B1"); g2 = new GwObject(g0,"B2"); g3 = new GwObject(g1,"C1"); g4 = new GwObject(g1,"C2"); g5 = new GwObject(g1,"C3"); g6 = new GwObject(g1,"C3"); int i; //任务1 //列出g0的直接子对象 qDebug() << "task1 : "; QObjectList list; list = g0->children(); for (i = 0;i < list.length();i++) qDebug() << list.at(i)->objectName(); qDebug(); //任务2 //列出所有g0的直接与间接子对象中,符合某个正则的所有对象 (多个) qDebug() << "task2 : "; QList <GwObject*> list2; list2 = g0->findChildren<GwObject*>(QRegExp("[A-C][0-9]*")); for (i = 0;i < list2.length();i++) qDebug() << list2.at(i)->objectName(); qDebug(); //任务3 //找到所有g0的直接与间接子对象中,名字为C3的某些对象 (多个) qDebug() << "task3 : "; list2 = g0->findChildren<GwObject*>(QString("C3")); for (i = 0;i < list2.length();i++) qDebug() << list2.at(i)->objectName(); qDebug(); //任务4 //找到所有g0的直接与间接子对象中,名字为B1的某个对象 (单个) qDebug() << "task4 : "; GwObject* result; result = g0->findChild<GwObject*>(QString("B1")); qDebug() << result->objectName(); result->deleteLater(); qDebug(); //退出 g0->deleteLater(); QObject::connect(g0,SIGNAL(destroyed()),&app,SLOT(quit())); return app.exec(); }
//GwObject.h #ifndef GWOBJECT_H #define GWOBJECT_H #include <QObject> class GwObject : public QObject { Q_OBJECT public: explicit GwObject(QObject *parent = 0,const QString& name = ""); signals: public slots: }; #endif // GWOBJECT_H //GwObject.cpp #include "GwObject.h" GwObject::GwObject(QObject *parent,const QString& name) : QObject(parent) { setObjectName(name); }