QT-自定义部件

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

提升为

  • 先放入一个QWidget 控件

例如:我们从 QWidget 派生出一个类 SmallWidget,实现了一个自定窗口,那么这个 SmallWidget 可以作为独立的窗口显示,也可以作为一个控件来使用:打开 Qt 的.ui 文件,因为 SmallWidget 是派生自 Qwidget 类,所以需要在 ui 文件中先放入一个 QWidget 控件, 然后再上边鼠标右键
在这里插入图片描述
添加要提升的类的名字,然后选择 添加
在这里插入图片描述
添加之后,类名会显示到上边的列表框中,然后单击提升按钮,完成操作.我们可以看到, 这个窗口对应的类从原来的 QWidget 变成了 SmallWidget
在这里插入图片描述
我们可以看到, 这个窗口对应的类从原来的 QWidget 变成了 SmallWidget

在这里插入图片描述

实例

  • 定义一个自定义控件
    Qt设计师界面类 类名为【mywidget】
  • 给自定义ui添加常用控件
  • 在其他ui文件中使用 自定义控件【mywidget】

【重点】 拖放一个widget控件,将其提升为类名称是自定义控件类【mywidget】
在这里插入图片描述
这样就产生了联系
在这里插入图片描述
mywidget.h

  • 提供函数接口
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

namespace Ui {
class MyWidget;
}

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();

    //提供设置slider的value接口
    void mySetvalue(int value);

    //提供获取slider的value接口
    int myGetvalue();
private:
    Ui::MyWidget *ui;
};

#endif // MYWIDGET_H

mywidget.cpp

  • 实现spinbox和slider联动
  • 实现接口函数
#include "mywidget.h"
#include "ui_mywidget.h"

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);//【此ui非彼ui】
//    connect(ui->spinBox,&QSpinBox::valueChanged,[=](int i){
//        ui->horizontalSlider->setValue(i);
//    });
    //
    void (QSpinBox::*p)(int)=&QSpinBox::valueChanged;//函数名就是入口地址吧,为什么还要取地址
    connect(ui->spinBox,p,
            ui->horizontalSlider,&QSlider::setValue);
    connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,
            &QSpinBox::setValue);
}

MyWidget::~MyWidget()
{
    delete ui;
}

void MyWidget::mySetvalue(int value)
{
    ui->horizontalSlider->setValue(value);
}

int MyWidget::myGetvalue()
{
    return ui->horizontalSlider->value();
}

mainwindow.cpp

  • 调用接口函数
  • ui中的widget
    在这里插入图片描述](https://img-blog.csdnimg.cn/20210412215332126.png)![在这里插入图片描述
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPushButton>
#include<QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
  //单机设置一半
    connect(ui->pushButton_2,&QPushButton::clicked,[=](){
        ui->widget->mySetvalue(50);//widget为控件名
    });
    connect(ui->pushButton,&QPushButton::clicked,[=](){
       qDebug()<<ui->widget->myGetvalue()<<endl;
    });
}

MainWindow::~MainWindow()
{
    delete ui;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值