四QT通过递归获取当前对象的全部子对象


children()只能获取到当前对象的子项,但是子项的子项就获取不到了,于是想到了用递归去获取全部子项。
主要代码如下:
void HomePage::getAllChild(QObjectList parentList, QObjectList &allChildList)
{
    for(int i = 0; i < parentList.size(); ++i)
    {
        QObject *child = parentList.at(i);
        QObjectList tmpList = child->children();
        if(tmpList.size() == 0)
        {
            allChildList.append(child);//没有子项就添加到allChildList
            continue;
        }
        else
        {
            getAllChild(tmpList, allChildList);//有子项就继续递归
        }
    }
}

首次调用该代码的方法如下:

QObjectList parentList = this->children();
QObjectList allChildList;
getAllChild(parentList, allChildList);
qDebug() << allChildList;

  

结果如下:

(QPushButton(0x17681e0, name = "btn_dev"), QPushButton(0x1767fe0, name = "btn_scene"), QPushButton(0x17679a0, name = "btn_doorbell"), QPushButton(0x1768160, name = "btn_set"), QLabel(0x1767920, name = "label_dev"), QLabel(0x17684e0, name = "label_scene"), QLabel(0x17678a0, name = "label_doorbell"), QLabel(0x1767aa0, name = "label_set"), QGridLayout(0x176ff10, name = "gridLayout"), QLabel(0x1768520, name = "label_hhmm"), QLabel(0x1777800, name = "label_MMdd"), QLabel(0x1777480, name = "label_ddd"), QTimer(0x177a3b0))

posted @ 2021-06-29 17:25  陈和权  阅读(436)  评论(0编辑  收藏  举报