15 QSlider及QProgressBar

一、QSlider简述

QSlider部件提供了一个垂直或水平滑动条。

滑块是一个用于控制有界值的典型部件。它允许用户沿水平或垂直方向移动滑块,并将滑块所在的位置转换成一个合法范围内的值。

QSlider很少有自己的函数,大部分功能在QAbstractSlider中。最有用的函数是setValue(),用来设置滑块的当前值;triggerAction()来模拟点击的效果(对快捷键有用),setSingleStep()、setPageStep()用来设置步长,setMinimum()和setMaximum()用于定义滚动条的范围。

QSlider提供了一些方法来控制刻度标记。可以使用setTickPosition()来表示刻度标记的位置,使用setTickInterval()来指定刻度的间隔;当前设置的刻度位置和间隔可以分别使用tickPosition()和tickInterval()函数来查询。
QSlider继承了一组全面的信号:
信号                          描述
valueChanged()     当滑块的值发生了改变,发射此信号。tracking()确定在用户交互时,是否发出此信号。
sliderPressed()       当用户按下滑块,发射此信号。
sliderMoved()         当用户拖动滑块,发射此信号。
sliderReleased()     当用户释放滑块,发射此信号。
 

例子

int nMin = 0;
int nMax = 200;
int nSingleStep = 10;

// 微调框
QSpinBox *pSpinBox = new QSpinBox(this);
pSpinBox->setMinimum(nMin);  // 最小值
pSpinBox->setMaximum(nMax);  // 最大值
pSpinBox->setSingleStep(nSingleStep);  // 步长

// 滑动条
QSlider *pSlider = new QSlider(this);
pSlider->setOrientation(Qt::Horizontal);  // 水平方向
pSlider->setMinimum(nMin);  // 最小值
pSlider->setMaximum(nMax);  // 最大值
pSlider->setSingleStep(nSingleStep);  // 步长

// 连接信号槽(相互改变)
connect(pSpinBox, SIGNAL(valueChanged(int)), pSlider, SLOT(setValue(int)));
connect(pSlider, SIGNAL(valueChanged(int)), pSpinBox, SLOT(setValue(int)));

pSpinBox->setValue(10);

二、QProgressBar简述

QProgressBar部件提供了一个水平或垂直进度条。

进度条用于给用户操作一个进度指示,并向它们说明应用程序仍在运行。

可以通过setRange()来设置进度的最小值和最大值(取值范围),也可使用setMinimum()和setMaximum()来单独设定;成员函数setValue()用于设置当前的运行值;调用reset()则会让进度条重新回到开始。

如果最小值和最大值都设置为0,进度条会显示一个繁忙指示,而不会显示当前值。有时候这很有用,例如:当使用QNetworkAccessManager下载东西,无法确定被下载项大小时。

可以通过setOrientation()指定进度条的方向 - 水平/垂直。

此外,成员函数setInvertedAppearance()用于设置进度条的行进方向,如果参数为true,可将进度方向设置为默认方向的反方向。

如果不需要显示进度条上的文本,可以使用setTextVisible()来隐藏。

指定垂直进度条文本的读取方向。

常量描述
QProgressBar::TopToBottom0文本是顺时针旋转了90度
QProgressBar::BottomToTop1文本是逆时针旋转90度

进度方向

QProgressBar *pProgressBar = new QProgressBar(this);
pProgressBar->setOrientation(Qt::Horizontal);  // 水平方向
pProgressBar->setMinimum(0);  // 最小值
pProgressBar->setMaximum(100);  // 最大值
pProgressBar->setValue(50);  // 当前进度

QProgressBar *pProgressBar2 = new QProgressBar(this);
pProgressBar2->setOrientation(Qt::Horizontal);  // 水平方向
pProgressBar2->setMinimum(0);  // 最小值
pProgressBar2->setMaximum(100);  // 最大值
pProgressBar2->setValue(50);  // 当前进度
pProgressBar2->setInvertedAppearance(true);  // 反方向

垂直方向只需要将Qt::Horizontal替换为Qt::Vertical即可,这里就不再演示了。

文本显示

setFormat()用于生成当前文本字符串。

  • %p - 被完成百分比所取代
  • %v - 被当前值所取代
  • %m - 被总步数所取代

默认值是 “%p%”。

QProgressBar *pProgressBar = new QProgressBar(this);
pProgressBar->setOrientation(Qt::Horizontal);  // 水平方向
pProgressBar->setMinimum(0);  // 最小值
pProgressBar->setMaximum(4800);  // 最大值
pProgressBar->setValue(2000);  // 当前进度
double dProgress = (pProgressBar->value() - pProgressBar->minimum()) * 100.0
                / (pProgressBar->maximum() - pProgressBar->minimum());
pProgressBar->setFormat(QString::fromLocal8Bit("当前进度为:%1%").arg(QString::number(dProgress, 'f', 1)));
pProgressBar->setAlignment(Qt::AlignRight | Qt::AlignVCenter);  // 对齐方式

如果要显示百分比,可以直接使用”%p%”(比如:41%),但是如果我们要精确显示(比如:41.7%),就得自己计算了,进度公式参考前面。

通过setAlignment(),可以指定显示文本的对齐方式(也可通过QSS样式中的属性text-align来指定)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiang木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值