1.创建项目及添加文件
选择Widget
填写类名
生成.h .cpp .ui文件
2.ui设计
在smallWidget.ui中拖动SpinBox,horizontalSlider到窗口中,调整窗口大小
在widget.ui中,拖一个widget到窗口中,调整大小;右击widget,点击提升为,在提升的类名称中输入smallWidget,勾选全局包含,点击添加,此时可在红色箭头处看见添加的内容
3.代码
在Qt助手中搜索SpinBox的信号函数
搜索QSlider,发现该类没有槽函数,于是找他的父类:QAbstractSlider
在smallWidget.cpp中,实现SpinBox和horizontalSlider绑定
smallWidget::smallWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::smallWidget)
{
ui->setupUi(this);
//QSinBox变化,QSlider跟着滑动
//由于QSpinBox::setValue有重载,所以定义函数指针
void(QSpinBox:: *spSignal)(int) = &QSpinBox::valueChanged;
connect(ui->spinBox,spSignal,ui->horizontalSlider,&QSlider::setValue);
//QSlider跟着滑动,QSinBox变化,
connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);
}
在smallWidget.h中 定义setNum(),getNum()接口
#ifndef SMALLWIDGET_H
#define SMALLWIDGET_H
#include <QWidget>
namespace Ui {
class smallWidget;
}
class smallWidget : public QWidget
{
Q_OBJECT
public:
explicit smallWidget(QWidget *parent = nullptr);
~smallWidget();
//设置数字
void setNum(int num);
//获取数字
int getNum();
private:
Ui::smallWidget *ui;
};
#endif // SMALLWIDGET_H
在smallWidget.h中 实现setNum(),getNum()接口
#include "smallwidget.h"
#include "ui_smallwidget.h"
smallWidget::smallWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::smallWidget)
{
ui->setupUi(this);
//QSinBox变化,QSlider跟着滑动
//由于QSpinBox::setValue有重载,所以定义函数指针
void(QSpinBox:: *spSignal)(int) = &QSpinBox::valueChanged;
connect(ui->spinBox,spSignal,ui->horizontalSlider,&QSlider::setValue);
//QSlider跟着滑动,QSinBox变化,
connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);
}
smallWidget::~smallWidget()
{
delete ui;
}
void smallWidget::setNum(int num){
ui->spinBox->setValue(num);
}
int smallWidget::getNum(){
return ui->spinBox->value();
}
在widget.c中 实现SpinBox设置和获取
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//点击getNum,获取当前SpinBox
connect(ui->pushButton_get,&QPushButton::clicked,[=](){
qDebug()<<"当前值为:"<<ui->widget->getNum();
});
//点击setNum,设置SpinBox数字
connect(ui->pushButton_set,&QPushButton::clicked,[=](){
ui->widget->setNum(50);
});
}
Widget::~Widget()
{
delete ui;
}
最后测试: