QT学习笔记—自定义控件

新建工程

新建工程选择有设计界面:
在这里插入图片描述

新建widget

右击工程名目录选择<添加新文件>

<选择一个模板>界面选择Qt,再选择Qt设计师界面类,最后选择界面模板为Widget
在这里插入图片描述

设计自定义控件

在新添加的Widget界面中添加QSpinBoxQSlider,让两个控件任意其中一个改变另一个跟着改变。
在这里插入图片描述
通过Qt助手查看可知两个控件有如下信号和槽:
在这里插入图片描述
在这里插入图片描述
在widget的构造函数中添加代码:

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

    //信号和槽有重载,使用函数指针指定信号和槽
    void (QSpinBox:: *spinSignal)(int) = &QSpinBox::valueChanged;
    void (QSlider:: *sliderSlot)(int) = &QSlider::setValue;
    connect(ui->spinBox, spinSignal, ui->horizontalSlider, sliderSlot); //设置信号和槽 spinBox改变slider跟着改变

    void (QSlider:: *sliderSignal)(int) = &QSlider::valueChanged;
    void (QSpinBox:: *spinSlot)(int) = &QSpinBox::setValue;
    connect(ui->horizontalSlider, sliderSignal, ui->spinBox, spinSlot);//设置信号和槽 slider改变SpinBox跟着改变
}

提供对外public接口获取和改变新定义控制的值:

class myNewWidget : public QWidget
{
    Q_OBJECT

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

public:
    void setNum(int);
    int getNum(void);

private:
    Ui::myNewWidget *ui;
};

void myNewWidget::setNum(int val)
{
    ui->spinBox->setValue(val);
}

int myNewWidget::getNum(void)
{
    return ui->horizontalSlider->value();
}

测试自定义控件

在主界面添加一个widget和连个PushButton:
在这里插入图片描述
右键widget选择<提升为>,在<提升的类名称>填入自定义控件的类名,点击<添加>
这种该操作能成功的前提是自定义控件必须继承自Qwidget,也就是自定义控件的父亲必须是要提升的控件。
在这里插入图片描述
测试代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

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

    setWindowTitle(tr("自定义控件"));

    connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::SetNewWidgetHalf);
    connect(ui->pushButton_2, &QPushButton::clicked, this, &MainWindow::getNewWidgetValue);
}

void MainWindow::SetNewWidgetHalf()
{
    ui->widget->setNum(50);
}

void MainWindow::getNewWidgetValue()
{
    qDebug() << "获取数值:" << ui->widget->getNum();
}

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

在这里插入图片描述


遇到了qDebug不能输出的问题

解决办法:
https://blog.csdn.net/cgzhello1/article/details/19916231

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欲盖弥彰1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值