天天看点

《QT学习笔记 —— 16. QT中自定义控件》

在搭建Qt窗口界面的时候,在一个项目中很多窗口,或者是窗口中的某个模块会被经常性的重复使用。一般遇到这种情况我们都会将这个窗口或者模块拿出来做成一个独立的窗口类,以备以后重复使用。

在使用Qt的ui文件搭建界面的时候,工具栏栏中只为我们提供了标准的窗口控件,如果我们想使用自定义控件怎么办?

下面通过一个实例实现自定义控件

先创建好一个工程,工程的创建可以参考《QT学习笔记 —— 2. 使用向导创建QT项目》,创建工程的时候需要选择ui文件。

《QT学习笔记 —— 16. QT中自定义控件》

创建好的工程结构如下:

《QT学习笔记 —— 16. QT中自定义控件》

下面是自定义控件类的步骤:

1. 在项目工程上右键选择 -->添加新文件

《QT学习笔记 —— 16. QT中自定义控件》

2. 选择C++ Class

《QT学习笔记 —— 16. QT中自定义控件》

3. 填写类的名称

《QT学习笔记 —— 16. QT中自定义控件》

4. 点击下一步/完成即可

5. 工程结构如下:

《QT学习笔记 —— 16. QT中自定义控件》

6、代码实现

整个工程,只需要修改smallwidget.cpp文件

#include "smallwidget.h"
#include <QSpinBox>
#include <QSlider>
#include <QHBoxLayout>

SmallWidget::SmallWidget(QWidget *parent) : QWidget(parent)
{
    QSpinBox *spin = new QSpinBox(this);
    QSlider *slider = new QSlider(Qt::Horizontal, this);

    //把控件添加到布局中
    QHBoxLayout *hLayout = new QHBoxLayout(this);
    hLayout->addWidget(spin);
    hLayout->addWidget(slider);

    //setLayout(hLayout);

    connect(spin, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
            slider, &QSlider::setValue);

    connect(slider,  &QSlider::valueChanged, spin, &QSpinBox::setValue);
}
           

7. 打开Qt的.ui文件,因为SmallWidget是派生自Qwidget类,所以需要在ui文件中先放入一个QWidget控件, 然后再上边鼠标右键

《QT学习笔记 —— 16. QT中自定义控件》
《QT学习笔记 —— 16. QT中自定义控件》
《QT学习笔记 —— 16. QT中自定义控件》

我们可以看到, 这个窗口对应的类从原来的QWidget变成了SmallWidget  

《QT学习笔记 —— 16. QT中自定义控件》

再次编译运行程序 :

《QT学习笔记 —— 16. QT中自定义控件》