#ifndef SMALLWIDGET_H
#define SMALLWIDGET_H
// 封装自定义控件
#include
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
实现绑定信号和槽, 使得拖动slider的时候, Spin Box 数值会变化; Spin Box数值变化的时候, Slider会滑动;
注意!
: 经过查阅文档之后, 发现QSpinBox的Signals中有两个valueChanged信号, 所以, 这里连接的时候会注意重载;
#include "smallwidget.h"
#include "ui_smallwidget.h"
smallWidget::smallWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::smallWidget)
{
ui->setupUi(this);
// 函数指针
// int(*p)(int, int); 这个语句就定义了一个指向函数的指针变量 p。
// 首先它是一个指针变量,所以要有一个“*”,即(*p);其次前面的 int 表示这个指针变量可以指向返回值类型为 int 型的函数;后面括号中的两个 int 表示这个指针变量可以指向有两个参数且都是 int 型的函数。
// 两个连接, QSpinBox移动, QSlider移动;QSlider移动, QSpinBox移动
// 查阅文档, 发现,QSpinBox的Signals中有两个valueChanged, 所以这里关于信号重载要处理一下, 否则连接会报错
// void valueChanged(int i)
// void valueChanged(const QString &text)
// 函数指针写法
//定义了一个指针变量 p,该指针变量可以指向返回值类型为 int 型,且有两个整型参数的函数。p 的类型为 int(*)(int,int)。
//函数返回值类型 (* 指针变量名) (函数参数列表);
//要加作用域
void (QSpinBox:: * SB)(int) = &QSpinBox::valueChanged;
connect(ui->spinBox, SB, ui->horizontalSlider, &QSlider::setValue);
connect(ui->horizontalSlider, &QSlider::valueChanged, ui->spinBox, &QSpinBox::setValue);
}
// 实现函数后, 要与widget关联
void smallWidget::setNum(int num)
{
ui->spinBox->setValue(num);
}
int smallWidget::getNum()
{
return ui->spinBox->value();
}
smallWidget::~smallWidget()
{
delete ui;
}
#include "widget.h"
#include "ui_widget.h"
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 获取控件当前的值
connect(ui->btn_get, &QPushButton::clicked, this, [=](){
qDebug() << ui->smallwidget->getNum();
});
// 设置控件值到一半
connect(ui->btn_set, &QPushButton::clicked, this, [=](){
ui->smallwidget->setNum(50);
});
}
Widget::~Widget()
{
delete ui;
}