QSlider 和 QProgressBar

在 Qt Designer 的组件面板里有几个滑动型数值输 入组件,包括滑动条(QSlider 类)、卷滚条(QScrollBar 类)和表盘(QDial 类),对应的 3 个类具有同一个父类 QAbstractSlider,所以它们具有一些共有的 特性。例如 QSlider 和 QScrollBar 都有 orientation 属性, 可以设置为水平方向或垂直方向。

进度条(QProgressBar 类)是用于显示数值的组件, 特别适用于显示百分比进度。

一. 各组件类的主要属性和接口函数

1.QAbstractSlider 类的属性

QAbstractSlider 是 QSlider、QScrollBar 和 QDial 的父类,它定义了这几个类共有的一些属性和接口函数。

QAbstractSlider 定义的主要属性
属性属性值类型功能
minimumint数据范围的最小值,默认值是 0
maximumint数据范围的最大值,默认值是 99
singleStepint拖动滑动条上的滑块,或按下卷滚条两端的按钮时变化的最小数值,默认值是 1
pageStepint输入焦点在组件上时,按下 PgUp 或 PgDn 键时变化的数值,默认值是 10
valueint组件的当前值,拖动滑块时自动改变此值
sliderPositionint滑块的位置,若 tracking 属性值为 true,sliderPosition 值就等于 value 值
trackingbool如果设置为 true,改变 value 值同时会改变 sliderPosition 值
orientationQt::Orientation滑动条或卷滚条的方向,可以设置为水平方向或垂直方向
invertedAppearancebool显示方式是否反向,默认值为 false,水平的滑动条或卷滚条由左向右数值增大
invertedControlsbool反向按键控制,若设置为 true,则按下 PgUp 或 PgDn 键时调整数值的方向相反

QAbstractSlider 的接口函数主要是这些属性的读写函数,还有一个常用的函数 setRange()用于设置组件的最小值和最大值,函数原型定义如下:

void QAbstractSlider::setRange(int min, int max)

2.QAbstractSlider 类的信号

QAbstractSlider 定义了几个信号,信号函数定义如下,信号触发时机见注释。

void actionTriggered(int action) //滑动条触发一些动作时
void rangeChanged(int min, int max) //minimum 或 maximum 属性值发生变化时
void sliderMoved(int value) //用户按住鼠标拖动滑块时
void sliderPressed() //在滑块上按下鼠标时
void sliderReleased() //在滑块上释放鼠标时
void valueChanged(int value) //value 属性值变化时

actionTriggered(int action)信号在滑动条触发一些动作时被发射,action 表示动作的类型,用枚举类型 QAbstractSlider::SliderAction 的值表示,如 SliderToMinimum 表示滑动到最小值。

value 属性值改变时,组件会发射 valueChanged()信号,可以通过拖动滑块改变 value 属性的 值,也可以在程序中运行函数 setValue()改变 value 属性的值。

用鼠标拖动滑块移动时,组件会发射 sliderMoved(int value)信号,参数 value 是组件的当前值。 如果 tracking 属性设置为 true,在拖动滑块时组件还会发射 valueChanged()信号;如果 tracking 属 性设置为 false,则只有在拖动结束并释放鼠标时组件才发射 valueChanged()信号。

3.QSlider 类

QSlider 一般用作滑动输入数值数据的组件,QSlider 类新定义的属性有两个。

• tickPosition:标尺刻度的显示位置,属性值是枚举类型 QSlider::TickPosition。

• tickInterval:标尺刻度的间隔值,若设置为 0,会在 singleStep 和 pageStep 之间自动选择。

4.QScrollBar 类

QScrollBar 没有定义新的属性。QScrollBar 一般与文本编辑器或容器组件组合使用,以便在一个大的显示范围内移动,例如 QPlainTextEdit 组件显示的文本超过编辑框的大小后,就会自动出现 水平卷滚条或垂直卷滚条。

5.QDial 类

QDial 表示表盘式的组件,通过旋转表盘获得输入值,QAbstractSlider 定义的一些属性对 QDial 没有影响,例如 orientation 属性。QDial 定义了 3 个新的属性。

• notchesVisible:表盘外围的小刻度线是否可见。

• notchTarget:表盘刻度间的间隔像素值。

• wrapping:表盘上首尾刻度是否连贯。如果设置为 false,表盘的最小值和最大值刻度之间有一定的空间,否则,表盘刻度是一整圈连续的。默认值是 false。

6.QProgressBar 类

QProgressBar 表示进度条组件, 一般以百分比数据来显示进度。QProgressBar 的父类是 QWidget,它与 QAbstractSlider 类没有继承关系。QProgressBar 组件中几个不易理解的属性如下:

• textDirection:文字的方向,这表示垂直进度条的文字的阅读方向,包括从上往下和从下往上两种选项。这个属性对于水平进度条无意义。

• format:显示文字的格式,“%p%”显示百分比,“%v”显示当前值,“%m”显示总步数。 默认为“%p%”

QProgressBar 类的接口函数主要是属性的读写函数。QProgressBar 还有两个常用的与属性读写无关的函数,定义如下:

void QProgressBar::setRange(int minimum, int maximum) //设置范围
void QProgressBar::reset() //将进度条复位,也就是使进度值为 0 

二. 示例程序功能实现

示例的窗口基类是 QWidget,效果如图:

“滑动输入”分组框里的 3 个滑动类组件作为输入组件,当它们的值变化时,会改变进度条的值。“ProgressBar 显示和设置”分组框中的几个复选框和单选按钮用于设置进度条的一些属性。

为了测试 QProgressBar 的 format 属性的显示效果,将进度条的 maximum 属性值设置为 200, 表盘、滑动条和卷滚条的 maximum 属性值也设置为 200。

需要为表盘、滑动条和卷滚条这 3 个组件的 valueChanged()信号关联槽函数,如果使用 Go to slot 对话框生成槽函数框架,将生成 3 个槽函数,并且每个槽函数的代码是相同的。为此,我们在窗口类 Widget 中自定义一个槽函数 do_valueChanged(),然后在 Widget 类的构造函数中将 3 个组件的 valueChanged()信号与这个自定义槽函数关联。

文件 widget.c 中的主要代码如下:

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) 
{ 
 ui->setupUi(this); 
 //将表盘、滑动条、卷滚条的 valueChanged()信号与自定义槽函数关联
 connect(ui->slider,SIGNAL(valueChanged(int)), this, SLOT(do_valueChanged(int))); 
 connect(ui->scrollBar,SIGNAL(valueChanged(int)),this, SLOT(do_valueChanged(int))); 
 connect(ui->dial,SIGNAL(valueChanged(int)), this, SLOT(do_valueChanged(int))); 
} 
void Widget::do_valueChanged(int value) 
{//自定义槽函数
 ui->progressBar->setValue(value); //设置进度条的 value 
} 
void Widget::on_chkBox_Visible_clicked(bool checked) 
{//textVisible 复选框
 ui->progressBar->setTextVisible(checked); 
} 
void Widget::on_chkBox_Inverted_clicked(bool checked) 
{//InvertedAppearance 复选框
 ui->progressBar->setInvertedAppearance(checked); 
} 
void Widget::on_radio_Percent_clicked() 
{//“显示格式--百分比”单选按钮
 ui->progressBar->setFormat("%p%"); //进度条显示百分比
} 
void Widget::on_radio_Value_clicked() 
{//“显示格式--当前值”单选按钮
 ui->progressBar->setFormat("%v"); //进度条显示数值
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以使用Qt中的信号与槽机制,将QLineEdit的textChanged()信号连接到QSlider和QProgressBar的setValue()槽上,从而实现当QLineEdit的数值改变时,QSlider和QProgressBar也随之改变。 在您的代码中,您可以在构造函数中添加以下代码: ```cpp connect(ui->lineEdit, SIGNAL(textChanged(QString)), ui->horizontalSlider, SLOT(setValue(QString))); connect(ui->lineEdit, SIGNAL(textChanged(QString)), ui->progressBar, SLOT(setValue(QString))); ``` 这将连接lineEdit的textChanged()信号到horizontalSlider的setValue()槽和progressBar的setValue()槽。在这种情况下,QSlider和QProgressBar将接收到QLineEdit文本改变的信号,并相应地更新它们的值。 请注意,setValue()函数需要的是int类型的值,因此您需要将QString转换为int类型。您可以使用QString的toInt()函数来实现这一点,例如: ```cpp connect(ui->lineEdit, SIGNAL(textChanged(QString)), ui->horizontalSlider, SLOT(setValue(QString.toInt()))); connect(ui->lineEdit, SIGNAL(textChanged(QString)), ui->progressBar, SLOT(setValue(QString.toInt()))); ``` 这样,当用户在QLineEdit中输入一个新值时,QSlider和QProgressBar将根据新值更新它们的值。 另外,请注意,connect()函数的第一个参数是信号的发送者,第二个参数是信号,第三个参数是槽的接收者,第四个参数是槽。在这里,lineEdit是信号的发送者,textChanged()是信号,horizontalSliderprogressBar是槽的接收者,setValue()是槽。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值