如何批量获取UI中带序列的对象名称

介绍在Qt中如何优雅地批量处理一系列功能相似的按钮,利用QObject的findChild方法实现按钮的动态获取与管理。

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

在Qt中,有时候会用到功能相近的系列按钮,他们的对象名object name是系列,例如pushbutton1,pushbutton2,pushbutton3……pushbuttonN,对于这样的系列按钮,一般来说,数量比较多,他们处理的功能基本类似,如果用手工一一去建立信号槽,那实实在在是一项体力活,一般的做法是定义一个按钮指针数组,然后手工一一将批量按钮用数组保存其指针,在需要批量处理他们时,遍历数组即可。这是方法之一,但还是不那么优雅,那么是否有更优雅的方式呢?答案是有的。在这里提供两种解决方案。

方案一

不用ui设计师,纯手工创建代码,这个就不用给出具体例子了,相信大家都会。

方案二 利用QObject提供的findChild方法

该方法的原型如下

template <typename T> T QObject::findChild(const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const

该函数会返回指定T类型,对象名称叫name的对象。如果没有,则返回空。
name:对象名
options:查找选项,默认为Qt::FindChildrenRecursively,即递归查找,
Qt::FindDirectChildrenOnly 该对象的直接孩子,非递归方式
Qt::FindChildrenRecursively 递归查找所有对象
根据我们的需要,参数用非递归查找即可,即Qt::FindDirectChildrenOnly
我们以QPushButton为例,假如我们UI中一共有10个按钮,其对象名依次为pushButton1,pushButton2……pushButton10;
头文件`

#define BUTTONNUM 10
……
namespace Ui {
class MyWidget;
}
class MyWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MyWidget(QWidget *parent = nullptr);
    ~MyWidget();

private:
    Ui::MyWidget*ui;
    QPushButton *m_pButtons[BUTTONNUM];
}

CPP文件

#include "mywidget.h"
#include "ui_mywidget.h"
MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    QString strObjName;
    for(int i=0;i<BUTTONNUM;i++)
    {//批量获取对象并存储到指针数组之中
    	strObjName=QString("pushButton%1").arg(i);
    	m_pButtons[i]=findChild<QPushButton *>(strObjName,Qt::FindDirectChildrenOnly);
    }
    ……
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值