遍历Qt界面控件

——2021 0408——

最近发现Qt中有一个函数可以遍历某种类型的界面控件:

QList<QPushButton*> btns = findChildren<QPushButton*>();

缺省就是递归调用的,所以,如果只是提取某一类控件,可以采用这种方式;

————————

查看了网络上常用的遍历控件代码,很有启发,不过,因为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));

/* ---------------------------------------我是分隔线-------------------------------------- */

这样就可以获取界面上所有的按钮了;

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值