一、自定义类
为了实现自定义类,也可以用ui界面拖拽控件,可以选择Qt设计师界面类,会生成.h、.cpp、.ui这3个文件
取名为smallWidget
在samllwidget.ui中放入一个Spin Box和Horizontal Slider
然后设计一下界面如下图所示
二、提升
为在主窗口中显示这个自定义控件
在widget.ui中也放置一个widget控件(因为smallwidget.ui的主体是widget)
然后右击widget选择-》提升
提升类的名称为smallWidget(可以在smallwidget.h的头文件中查看具体类名,复制过来保证万无一失),然后点击添加,最后点击提升
(如果点击全局包含,下次再次使用widget提升的时候,就可以直接选smallWidget了)
提升完后,右侧的widget的类变成了smallWidget了
直接看widget.ui界面
运行后,就能显示了
三、功能实现
1.实现功能
目的是实现
- QSpinBox移动 QSlider跟着移动
- QSlider滑动 QSpinBox数字跟着改变
首先
文档查找QSpinBox
找到其信号,只需要使用valueChanged即可
文档查找水平滑块的槽函数
但是直接找QHorizontalSlider是找不到的,可以看到是属于QSlider,查QSlider即可
但是QSlider没有槽函数,因此找其父类QAbstractSlider
可以找到槽函数了,只需要使用setValue即可
//QSpinBox移动 QSlider跟着移动 connect(ui->spinBox,&QSpinBox::valueChanged,ui->horizontalSlider,&QSlider::setValue);//查阅信号和槽函数文档即可 //QSlider滑动 QSpinBox数字跟着改变 connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);
这样就能实现上述的功能了
2.对外提供接口
目的:
- 通过按钮去设置值
- 通过按钮去获取值
如果还有其他需求,比如获取上面的数字,我们可以对外提供接口
在smallwidget.h的public中声明
void setNum(int num); int getNum();
在smallwidget.cpp中实现
void smallWidget::setNum(int num){ ui->spinBox->setValue(num); } int smallWidget::getNum(){ return ui->spinBox->value(); }
这样子就提供了2个接口
接下去对按钮进行 关联(使用上述2个接口)在widget.cpp中
//点击获取 获取当前的值 connect(ui->btn_get,&QPushButton::clicked,[=](){ qDebug() << ui->widget->getNum(); }); //设置到一半 connect(ui->btn_set,&QPushButton::clicked,[=](){ ui->widget->setNum(50); });
总结