查看了網絡上常用的遍歷控件代碼,很有啓發,不過,因爲Qt界面類往往有很多層,用網上提到的方法通常只能遍歷一層,也就是說,當獲取父節點的時候,只能遍歷子節點,子節點以下的節點,無法獲取到了。
所以,改進後的遍歷方法是,先採用遞歸函數,獲取界面上的控件;然後,從這些控件中,提取自己需要的控件;
代碼如下:
/* 獲取所有控件 */
QObjectList getAllUIControls(QObject* parent)
{
QObjectList lstOfChildren, lstTemp;
if (parent)
{
lstOfChildren = parent->children();
}
if (lstOfChildren.isEmpty())
{
return lstOfChildren;
}
lstTemp = lstOfChildren; /* 這裏要注意,如果不拷貝原先的list,直接使用,會有問題; */
foreach(QObject* obj, lstTemp)
{
QObjectList lst = getAllUIControls(obj);
if (!lst.isEmpty())
{
lstOfChildren.append(lst);
}
}
return lstOfChildren;
}
/* 獲取界面上所有按鈕;
當然也可以是所有的lineEdit或其他;
*/
QObjectList getAllButtons(QObjectList lstUIControls)
{
QObjectList lstOfButtons;
for each (QObject* obj in lstUIControls)
{
if (obj->metaObject()->className() == QStringLiteral("QPushButton"))
{
lstOfButtons.append(obj);
}
}
return lstOfButtons;
}
/*調用時,可以在界面所在類這樣調用*/
QObjectList listOfButton = getAllButtons(getAllUIControls(this));
/* ---------------------------------------我是分隔線-------------------------------------- */
這樣就可以獲取界面上所有的按鈕了;