【QT】 Qt自定义ui控件

在使用Qt的ui设计时,Qt为我们提供了标准的窗口控件,但是在很多复杂工程中,标准窗口控件并不能满足所有的需求,这时就需要我们自定义控件。我们自定义的类既可以作为独立的窗口显示,又可以作为一个控件显示。


我们要实现的自定义控件效果如下:

图片名称

点击spinBox,滑动条Slider开始滑动。滑动条Slider开始滑动,spinBox的数字也开始改变。spinBox和滑动条Slider通过在ui设计时拖动控件实现。



步骤如下:

1.1 添加新文件 - Qt – 设计师界面类 (.h .cpp .ui)

创建一个Qt设计师窗体文件和相应的类(C++头文件和源文件)用于实现,您可以将此窗体文件和类加入到已经存在的Qt 控件项目中。

图片名称

界面模板选择最干净的Widget:

图片名称

给自己设计的界面类取个名字,SmallWidget:

图片名称



1.2 smallwidget.ui中 设计 QSpinBox和QSlider 两个控件

smallwidget.ui 中,拖拽 QSpinBoQSlider 这两个控件,选中 SmallWidget 对象,选中水平布局。

图片名称

注意:SmallWidget的类型是Qwidget



1.3 实现功能,并提供 getNum 和 setNum对外接口

smallwidget.h

class SmallWidget : public QWidget
{
    Q_OBJECT

public:
    explicit SmallWidget(QWidget *parent = nullptr);
    ~SmallWidget();

    //设置两个对外接口
    void setNum(int num);
    int getNum();

private:
    Ui::SmallWidget *ui;
};

smallwidget.cpp

#include "smallwidget.h"
#include "ui_smallwidget.h"

SmallWidget::SmallWidget(QWidget *parent) :  QWidget(parent), ui(new Ui::SmallWidget)
{
    ui->setupUi(this);

    // QSpinBox数字改变 QSlider跟着移动
    connect(ui->spinBox, SIGNAL(valueChanged(int)), ui->horizontalSlider, SLOT(setValue(int)));


    // QSlider移动 QSpinBox数字跟着改变
    connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), ui->spinBox, SLOT(setValue(int)));
}


//设置值
void SmallWidget::setNum(int num)
{
    ui->spinBox->setValue(num);
}

//获取值
int SmallWidget::getNum(){
    return ui->spinBox->value();
}



1.4 Widget.ui中使用自定义控件,拖拽一个Widget,点击提升为,点击添加,点击提升

widget.ui 中,拖拽一个Widget,

图片名称

点击提升为,

图片名称

点击添加,

图片名称

点击提升。

图片名称

注意,这时 widget.ui 中 widget 的类名从 QWidget 变成 SmallWidget 。

图片名称

运行效果:

图片名称


1. 5 点击按钮,获取当前值,设置当前值

widget.ui 中,再放置两个 QPushButon 按钮,用来获取当前值,设置当前值。

图片名称

widget.cpp

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)  
{
    ui->setupUi(this);


    //点击按钮 获取当前自定义的smallWidget的值
    connect(ui->btn_getNum, &QPushButton::clicked, ui->smallWidget, [this](){
        qDebug() << ui->smallWidget->getNum();
    });


    //点击按钮 设置当前自定义的smallWidget的值
    connect(ui->btn_setNum, &QPushButton::clicked, ui->smallWidget, [this](){
        ui->smallWidget->setNum(20);
    });
}

ui->smallWidget 是自定义 SmallWidget 类的实例,因此可以调用SmallWidget` 类的接口,getNum() 和 setNum()。

图片名称

运行结果:

图片名称



参考链接:
手把手教QT—8.自定义控件

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值