第55篇 Qt获取Widget窗体子控件-小案例说明

我觉得添加一个按钮要在类里面添加一个变量,这实在是太麻烦了,就想自己在局部函数里面添加,然后通过父窗口名称获取之类的,首先我想到的是打下this->,然后看看后面接什么函数,第一找到的是childAt(),其实这个可以用的,只是在以些其他地方的初始化上有点不友好,没有去研究了,直接网上查找,终于看到了findChild();

1.帮助文档里的函数说明

shuom
在这里插入图片描述英语不好啊,直接百度翻译了。不过主要看的是怎么用对吧,文档里也有说明的,
在这里插入图片描述
我只需要用到第一种就够了。

2.案例

我想写一个点击按钮,然后有提示信息的界面,如下:
在这里插入图片描述

但是我不想直接在窗口类里面添加变量,而是在函数里添加变量,且自己手动编写代码布局,那么怎么实现呢?请看下面。

创建项目不用说了吧。

2.1.打开头文件创建函数

首先项目创建好之后,我们打开窗口类的头文件创建相关的函数,当然要记得添加相应的库头文件。
我们需要添加一个QLabel和一个QPushButton,所以只添加这两个的头文件即可。
然后添加三个函数:init()、myLayout()、btn_ok_clicked()。分别对应按钮的初始化、界面的布局、按钮响应槽函数。
OK,完成了,代码如下:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QLabel>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    void init();
    void myLayout();
    ~Widget();

public slots:
    void btn_ok_clicked();
};
#endif // WIDGET_H

2.2.对按钮初始化及界面布局

1,初始化的时候记得指定父对象,如this:

QPushButton* btn_ok = new QPushButton("按钮",this);

这样的话,该按钮就是窗体的直接子控件了。

2,给变量指定对象名,即:

btn_ok->setObjectName("btn_ok");

因为findChild()函数查找的时候是通过对象名查找的,不指定对象名的话会找不到。

做完这两步就可以了。

好了,剩下的都在下面了。

#include "widget.h"
#include <QVBoxLayout>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->init();
    this->myLayout();
}

void Widget::init()
{
    QPushButton* btn_ok = new QPushButton("按钮",this);
    btn_ok->setObjectName("btn_ok");
    QObject::connect(btn_ok,SIGNAL(clicked()),this,SLOT(btn_ok_clicked()));

    QLabel* txt_ok = new QLabel("提示",this);
    txt_ok->setObjectName("txt_ok");
    txt_ok->setText("按钮被点击的时候提示!");
}

void Widget::myLayout()
{
    QVBoxLayout* vlayout = new QVBoxLayout();
    vlayout->addWidget(this->findChild<QLabel *>("txt_ok"));
    vlayout->addWidget(this->findChild<QPushButton *>("btn_ok"));
    this->setLayout(vlayout);
}

Widget::~Widget()
{

}

void Widget::btn_ok_clicked()
{
    static int i = 0;//统计点击次数
    QLabel *txt_ok = this->findChild<QLabel *>("txt_ok");
    txt_ok->setText("你点击了耶" + QString::number(i));
    i++;
}

2.3.结果

在这里插入图片描述


版权声明:本文为weixin_49188222原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。