四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))