qt自定义控件的封装

刚学了一个很有意思的东西,前面学了list,Tree,Table三大控件和一部分常用基础控件,但感觉没啥意思,就是用别人的直接用,刚学了一个自定义控件的封装,流程如下:
 

想把两个不相关的组件封装在一块,直接用ui不行,所以先新添加了qt设计师页面,新添加了一个SmallWidget *ui

在smallwidget.ui中添加了一个,缩放至正常大小

在主页面widget.ui中提升smallwidget.ui

取两个空白的widget,提升                      效果如下

接下来在smallwidget.cpp中进行代码实现        刚听了一句话很有道理,逻辑业务的内容要用代码的实现   

信号和槽进行链接  connect     

//spinBox数字改变   slider跟着滑动
    void(QSpinBox:: * signal)(int)=&QSpinBox::valueChanged;//这里有两个同名函数(重载),所以需要函数指针指向int那个
    connect(ui->spinBox,signal,ui->horizontalSlider,&QSlider::setValue);
    //slider滑动  spinBox数字跟着改变
    connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);

重点:

存在两个同名函数(重载),所以需要函数指针指向t那个

void(QSpinBox:: * signal)(int)=&QSpinBox::valueChanged ;

这样就实现了spinBox和horizontalSlider的双向控制      效果如下

增进一点  那么添加两个按钮 一个控制一半 ,一个控制qDebug输出获取结果怎么实现呢?

这很巧妙

 

 因为这是两个新实现,所以要新创建两个功能

先在smallwidget.h中声明自己提供两个功能

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

    //设置数据
    void setData(int val);

    //获取数据
    int getData();

再去smallwidget.cpp封装接口           这里主要是实现一个setValue一动,horizontalSlider跟着变,然后QSpinBox跟着变          get同理

//设置数据
void SmallWidget::setData(int val)//写成员函数加上了父类作用域
{
    ui->horizontalSlider->setValue(val);//setValue一动,horizontalSlider跟着变,然后QSpinBox跟着变
}

//获取数据
int SmallWidget::getData()
{
    return ui->horizontalSlider->value();
}

再到最妙的地方

pushButton一按就可以调用smallwidget               不要忘记我们之前再widget做了提升,所以它就可以用smallwight函数,所以点设置获取就可以连接上     这里太牛了  理解之后豁然开朗

    //点击设置到一半按钮
    connect(ui->pushButton,&QPushButton::clicked,[=](){
        ui->widget->setData(50);
    });//此时能连上smallwidget原因是前面提升过了,所以它就可以用smallwight函数,所以点设置获取就可以连接上

    //点击获取当前值按钮
    connect(ui->pushButton_2,&QPushButton::clicked,[=](){
        qDebug()<<ui->widget->getData();//页面输出
    });

补充:两个按钮只能在这里设置,不能去smallwidget中设置,因为这个在uiwidget没有提升

豁然开朗

相关推荐

  1. QT学习之定义封装

    2024-01-07 06:52:05       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-07 06:52:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-07 06:52:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-07 06:52:05       82 阅读
  4. Python语言-面向对象

    2024-01-07 06:52:05       91 阅读

热门阅读

  1. element ui图片上传组件封装+校验黑白照片

    2024-01-07 06:52:05       54 阅读
  2. 思科路由器忘记密码怎么重置

    2024-01-07 06:52:05       65 阅读
  3. Apache、MySQL、PHP编译安装LAMP环境

    2024-01-07 06:52:05       45 阅读
  4. SSE和websocket

    2024-01-07 06:52:05       84 阅读
  5. 安装Anaconda和PyTorch

    2024-01-07 06:52:05       59 阅读
  6. 创建ESP32开源WiFi MAC(介质访问控制)层

    2024-01-07 06:52:05       62 阅读
  7. 【鸿蒙4.0】harmonyos Day 01

    2024-01-07 06:52:05       72 阅读
  8. 十三.存储过程和函数

    2024-01-07 06:52:05       43 阅读
  9. 如何从本质矩阵E中分解旋转矩阵R和平移向量t?

    2024-01-07 06:52:05       56 阅读
  10. Python学习笔记第七十九天(OpenCV轨迹栏)

    2024-01-07 06:52:05       41 阅读