Qt遍历控件

本文介绍如何使用Qt的QObject类及其子类的方法实现界面控件的动态配置,无需修改源代码即可通过外部配置文件调整界面元素的状态。文章详细解释了使用findChild、findChildren和children等方法遍历和获取特定类型的控件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做的一个Qt程序想加入一些扩展性,想让界面里的控件可以添加删除,而不需要改动程序代码。这就需要加入一些通用处理代码,基础就是可以遍历控件,或者可以按照名字(保存在字符串中)得到控件的指针。而字符串可以从外部配置文件中动态获取,不用重新编译项目。

Qt中有两种获取子控件的方式,一种是模板函数,另一种不区分类型,返回QList。

1. QObject::findChild

根据name返回相应的T类型控件指针。

2. QObject::findChildren

根据类型和正则表达式返回控件指针列表。

3. QObject::children

返回所有的子控件。

前两种方式需要知道控件的类型,而第三种方法返回的指针都是QObject,需要判断控件的具体类型才能转换成相应的控件并使用。Qt提供很好的机制来实现这个功能:Qt Meta-Object System。

QObject::metaObject()返回QMetaObject对象,利用该对象可以得到类型相关信息。

QMetaObject::className()返回对象的类型。QObject::children()得到的指针可以根据对象类型名提升为实际的子类指针。

上例中我只需要处理QCheckBox和QLineEdit两种的控件,当然这两种控件的处理方式有一些相近的地方,可以简化代码,但我还没什么具体的想法,跪求指导啊。

FROM: http://windrocblog.sinaapp.com/?p=799

================================================

QT如何遍历控件,并依次获取控件的值啊 

QT如何去获取界面上所有控件的类型

QObjectList list = children();
    QPushButton *b;
    foreach (QObject *obj, list) {
        b = qobject_cast<QPushButton*>(obj);
        if(b){
            qDebug() << b->rect();
        }
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值