遍歷Qt界面控件

查看了網絡上常用的遍歷控件代碼,很有啓發,不過,因爲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));

/* ---------------------------------------我是分隔線-------------------------------------- */

這樣就可以獲取界面上所有的按鈕了;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章