Qt 之 findChild

一、简述

  • 在Qt编程过程中,通常会有多个部件嵌套,而大多数部件都有父子依赖关系,但是有些情况下不能直接引用子部件,这时我们可以通过父部件来findChild -“查找孩子”。
  • 在实际得Qt编程过程中,通常会有多个空间嵌套,就比如说:主窗体是QMainWdow,中央挂件是QTabWidget,而每一个QTabWidget子窗口中又有QTextEdit,这样得组合就是经典得多标签页文本编辑器样式,当然这个暑假我也在做这种编辑器。通常我们可以很容易得获得QMainWindow上QTabWidget控件得对象,但是想要直接操作QTabWidget中嵌套得QTextEdit就不能直接引用

二、原型

在这里插入图片描述
在这里插入图片描述

三、使用示例

  • 查找objectName为button1的QPushButton
QPushButton *button = parentWidget->findChild<QPushButton *>("button1");
  • 查找父类下所有的子对象
QListWidget *list = parentWidget->findChild<QListWidget *>();
  • 查找父类下objectName为button1的直接子对象
QPushButton *button = parentWidget->findChild<QPushButton *>("button1", Qt::FindDirectChildrenOnly);
  • 查找父类下所有的直接子对象
QListWidget *list = parentWidget->findChild<QListWidget *>(QString(), Qt::FindDirectChildrenOnly);

当然关于“找孩子”得函数不只这一个,具体得大家可以再查文档,这里给出一个例子:

QList<QLineEdit *> lineEdit = tabWidget.findChildren<QLineEdit *>();

这句话的意思就是在tabWidget挂件种寻找所有得QLineEdit控件,然后返回给QList容器(QList容器中每一个元素都为 QLineEdit *类型),下面给出一个实例:
描述:主窗体为QMainWindow,中央挂件为QTabWidget,每个子页面包括若干个QLineEdit(注意:Tab1页面有两个,Tab2页面有1个),当单击“setText”按钮时候,自动给每一个QLineEdit填充文字。

关键代码如下:

void MainWindow::on_pushButton_clicked()
{
    QList<QLineEdit *> lineEdit=ui->tabWidget->findChildren<QLineEdit *>();
    for (int i=0;i<lineEdit.count();i++)
    lineEdit.at(i)->setText("www.hicjiajia.cn");
}

这样对我们操作多嵌套式得控件确实很方便,但是又有一个问题了,这种方法会将所有QLineEdit都给影响到了,但是我现在想只让某个特定得QLineEdit来响应怎摸办,还好,findChildren()函数还是可以带参数得:

QList<QLineEdit *> lineEdit = tabWidget.findChildren<QLineEdit *>("lineEdit");

注意:括号里得 lineEdit 参数为控件得 objectName ,因此这里我们可以指定任何控件,很方便

注意:Widget根据容器的不同寻找的方式不一样比如QWidget_3里面有LineEdit只需要直接找ui.QWidget_3但是如果是QStackWidget里面的化就是直接放ui->stackedDecive2->widget(0)里面就可以了

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值