Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程序,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹ProgressBar
進度條組件的常用方法及靈活運用。
ProgressBar(進度條)是在Qt中常用的用戶界面組件之一,用於顯示任務的完成進度。它通常以一個水平或垂直的條形圖形式展示,表示任務已完成的比例。進度條組件提供了一種直觀的方式來顯示任務的進度,讓用戶清晰地瞭解任務的完成情況。其還可根據需要在水平或垂直方向上顯示,以適應不同的界面佈局。
以下是QProgressBar
類的一些常用方法的說明和概述,以表格形式列出:
方法 | 描述 |
---|---|
QProgressBar(QWidget *parent = nullptr) |
構造函數,創建一個組件對象。 |
setRange(int minimum, int maximum) |
設置組件的範圍,即任務的最小和最大值。 |
setValue(int value) |
設置組件的當前值,即任務已完成的進度。 |
value() const |
獲取組件的當前值。 |
setMinimum(int minimum) |
設置組件的最小值。 |
setMaximum(int maximum) |
設置組件的最大值。 |
reset() |
重置組件,將當前值設置爲最小值。 |
minimum() const |
獲取組件的最小值。 |
maximum() const |
獲取組件的最大值。 |
text() const |
獲取組件顯示的文本,通常是百分比值。 |
setFormat(const QString &format) |
設置組件顯示文本的格式,支持百分比等。 |
setAlignment(Qt::Alignment alignment) |
設置組件文本的對齊方式。 |
setInvertedAppearance(bool invert) |
設置組件是否顯示爲反向進度(從右到左)。 |
setOrientation(Qt::Orientation orientation) |
設置組件的方向,可以是水平或垂直。 |
setStyleSheet(const QString &styleSheet) |
設置組件的樣式表。 |
setFormat(const QString &format) |
設置組件的顯示格式。 |
setAlignment(Qt::Alignment alignment) |
設置組件文本的對齊方式。 |
這些方法提供了對QProgressBar
進行配置、管理和與之交互的靈活性。你可以根據具體的應用需求使用這些方法,使QProgressBar
在你的Qt應用程序中按照期望的方式工作。
說到進度條組件就不得不提起定時器類,因爲進度條組件往往需要配合定時器一起使用,QTimer是 Qt 中用於創建定時器的類,它允許你在一段時間間隔後執行特定的操作。以下是 QTimer
類的一些常用方法的說明和概述,以表格形式列出:
方法 | 描述 |
---|---|
QTimer(QObject *parent = nullptr) |
構造函數,創建一個定時器對象。 |
start(int msec) |
啓動定時器,指定觸發時間間隔(以毫秒爲單位)。 |
stop() |
停止定時器,阻止進一步的定時觸發。 |
setInterval(int msec) |
設置定時器的觸發時間間隔。 |
setSingleShot(bool singleShot) |
設置定時器是單次觸發還是重複觸發。 |
isActive() const |
檢查定時器是否處於活動狀態。 |
remainingTime() const |
返回離下一次定時器觸發還有多少時間,如果不活動返回 -1。 |
timeout |
在定時器超時時發出,可以與槽函數連接以執行相應操作。 |
setTimerType(Qt::TimerType atype) |
設置定時器的類型,可以是 PreciseTimer 或 CoarseTimer 。 |
timerType() const |
返回定時器的類型。 |
setSingleShot(bool singleShot) |
設置定時器是單次觸發還是重複觸發。 |
interval() const |
返回定時器的觸發時間間隔。 |
timeout() |
返回 timeout 信號的 QMetaObject::Connection 對象。 |
這些方法提供了對 QTimer
進行配置、管理和與之交互的靈活性。你可以根據具體的應用需求使用這些方法,使 QTimer
在你的 Qt 應用程序中按照期望的方式工作。
首先在MainWindow
主函數中通過connect
設置綁定定時器,並在匿名函數中對數值進行判斷,如果到達了進度條最大值則直接使用my_timer->stop()
停止計時,否則每次設置進度條加一,代碼如下所示;
#include <QTimer>
// 全局定時器變量指針
QTimer *my_timer;
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 聲明定時器
my_timer = new QTimer(this);
// 綁定一個匿名函數
connect(my_timer,&QTimer::timeout,[=]{
static int x = 0;
// 判斷是否到達了進度條的最大值
if(x != 100)
{
x++;
ui->progressBar_Up->setValue(x);
ui->progressBar_Down->setValue(int(100-x));
}
else
{
x=0;
my_timer->stop();
}
});
}
當用戶點擊初始化按鈕時,我們首先將兩個進度條使用reset()
屬性進行重置,接着設置progressBar_Down
爲最大值狀態,代碼如下所示;
// 初始化進度條
void MainWindow::on_pushButton_clear_clicked()
{
// 清空進度條
ui->progressBar_Up->reset();
ui->progressBar_Down->reset();
// 設置遞減進度條最大值100
ui->progressBar_Down->setValue(100);
}
啓動與停止定時器流程一致,首先通過my_timer->isActive()
來驗證定時器是否啓動中,日過不是則my_timer->start(100)
啓動,如果是則my_timer->stop()
停止。
// 啓動定時器,並設置週期爲100毫秒
void MainWindow::on_pushButton_start_clicked()
{
if(my_timer->isActive() == false)
{
my_timer->start(100);
}
}
// 停止定時器
void MainWindow::on_pushButton_stop_clicked()
{
if(my_timer->isActive() == true)
{
my_timer->stop();
}
}
運行程序,首先點擊初始化按鈕設置進度條的狀態值,然後讀者可點擊啓動定時器和停止定時器,如下圖所示;