文章目录
前言
在Qt框架中,QSpinBox和QHorizontalSlider是两个非常实用的控件类,它们分别用于创建数字输入框和水平滑块。这两个控件经常用于需要用户输入或调整数值的场景,比如设置音量、调整亮度或选择页面数量等。下面将详细介绍这两个类的功能和使用方法。
1.QSpinBox
QSpinBox是一个用于输入整数值的控件。它提供了一个带有上下箭头的文本框,用户可以通过点击箭头或直接在文本框中输入数字来更改值。这个控件非常适合用于需要用户输入一个范围内的整数值的情况。
主要特性:
- 范围设置: 可以设置QSpinBox接受的最小值和最大值,确保用户输入的值在有效范围内。
- 步长设置: 可以定义每次点击箭头时值变化的数量。
- 前缀和后缀: 可以为输入框添加文本前缀或后缀,比如货币符号或单位。
- 编辑功能: 用户可以直接在文本框中输入值,并且可以通过键盘快捷键(如Ctrl+A全选、Ctrl+C复制等)进行编辑。
- 信号与槽: 当值发生变化时,QSpinBox会发出信号,可以与其他控件或函数进行连接。
使用方法:
创建一个QSpinBox控件并将其添加到布局中非常简单。以下是一个基本的示例代码:
QSpinBox *spinBox = new QSpinBox(this);
spinBox->setRange(0, 100); // 设置范围为0到100
spinBox->setValue(50); // 设置初始值为50
spinBox->setSingleStep(5); // 设置步长为5
spinBox->setPrefix("$"); // 设置前缀为美元符号
2.QHorizontalSlider
QHorizontalSlider是一个水平滑块控件。它允许用户通过拖动滑块来选择一个范围内的值。这个控件非常适合用于需要用户快速调整大量数据或进行精细调整的场景。
主要特性:
- 范围设置: 可以设置滑块的最小值和最大值。
- 步长设置: 虽然滑块本身可以连续移动,但可以设置步长来决定滑块值变化的粒度。
- 页面步长: 当用户点击滑块轨道的某个位置时,可以设置页面步长来快速调整值。
跟踪:可以设置滑块是否实时跟踪鼠标位置,或者只在释放鼠标时才更新值。 - 信号与槽: 当滑块位置发生变化时,QHorizontalSlider会发出信号。
使用方法:
创建一个QHorizontalSlider控件并将其添加到布局中的方法与QSpinBox类似。以下是一个示例代码:
QHorizontalSlider *slider = new QHorizontalSlider(this);
slider->setRange(0, 100); // 设置范围为0到100
slider->setValue(50); // 设置初始值为50
slider->setSingleStep(1); // 设置步长为1
slider->setPageStep(10); // 设置页面步长为10
// ...(将slider添加到布局中等其他操作)
总结
在实际应用中,可以根据具体需求选择使用哪个控件,或者将两者结合使用以提供更丰富的交互体验。
3.QSpinBox+QHorizontalSlider
3.1场景
QSpinBox和QHorizontalSlider是Qt框架中两个非常实用的控件类,它们分别提供了不同的交互方式来输入或调整数值。通过合理地使用这两个控件,可以创建出用户友好且功能强大的界面。制作一个小场景学习“提升为”的应用。场景为将spinbox控件与slider控件结合,即二者其一的值改变,则另外一个的值会跟着改变。将这个界面布局,并向外提供方法,在其他界面中使用“提升为”实例化该类对象,从而使用类方法。
3.2创建Qt界面师类
1.创建subWidget Qt界面师类,放入两个部件,并布局如下:
2.做二者之间的连接,spinbox值改变,则slider值改变,反之一样。在Init()函数中执行,init被构造函数调用,这样做是为了结构清楚。
void subWidget::Init()
{
//QSlider移动 QSpinBox跟着移动
connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);
//QSpinBox移动 QSlider跟着移动
void(QSpinBox:: *spinSignal)(int)=&QSpinBox::valueChanged;//通过函数指针确定所用重载函数
connect(ui->spinBox,spinSignal,ui->horizontalSlider,&QSlider::setValue);
}
3.对外提供修改值、获取值的方法如下:
void subWidget::setvalue(int val)
{
ui->spinBox->setValue(val);
}
int subWidget::getvalue()
{
return ui->spinBox->value();
}
4.运行,结果如下:
3.2创建Qt界面师类MainWidget
1.在界面中添加两个按钮、两个edit输入和一个widget如下:
2.打开并选中上面的subwidget部件,右键选择提升的窗口部件,做如下设置:
3.在mainWidget的ui界面中,选中widget右键–>提升为–>选择subWidget。 将A界面中的A1部件提升为B的含义为,将B界面师类在A类中实例化,即在A中调用B类对象。
4.main函数中,修改如下:
#include "subwidget.h"
#include "mainwidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// subWidget w;
// w.show();
mainWidget w;
w.show();
return a.exec();
}
5.在mainWidget.cpp中做如下设置:
void mainWidget::Init()
{
connect(ui->get_Btn,&QPushButton::clicked,[=](){
ui->getEdit->setText(QString::number(ui->widget->getvalue()));
});
connect(ui->set_Btn,&QPushButton::clicked,[=](){
ui->widget->setvalue(ui->setEdit->text().toInt());
});
}
3.3运行效果
4.传送门
END |
🎏文章原创,首发于CSDN论坛。
🎏欢迎点赞❤❤收藏⭐⭐打赏💴💴!
🎏欢迎评论区或私信指出错误❌,提出宝贵意见或疑问❓。