Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹`QSpinBox`精度數值組件的常用方法及靈活運用。`QSpinBox`是Qt框架中的一個部件(Widget),... ...
Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹QSpinBox
精度數值組件的常用方法及靈活運用。
QSpinBox
是Qt框架中的一個部件(Widget),用於提供一個方便用戶輸入整數值的界面元素。它通常以微調框(SpinBox)的形式展現,用戶可以通過微調框上的按鈕或手動輸入來增加或減少整數值。在實際使用中該控制項主要用於整數或浮點數的計數顯示,與普通的LineEdit
組件不同,該組件可以在前後增加特殊符號並提供了上下幅度的調整按鈕,靈活性更強。
使用場景:
- 數值輸入: 適用於需要用戶輸入整數值的場景,如設置參數、調整數量等。
- 調整參數: 在需要進行微小調整的地方,提供直觀的增減按鈕。
- 限制輸入範圍: 當需要確保用戶輸入在一定範圍內時,可設置最小值和最大值。
- 只讀展示: 可以用於只讀展示某個數值,不允許用戶修改。
以下是QSpinBox
類的一些常用方法,說明並概述成表格:
方法 | 描述 |
---|---|
QSpinBox(QWidget *parent = nullptr) |
構造函數,創建一個整數微調框。 |
int value() const |
獲取當前微調框中的整數值。 |
void setValue(int value) |
設置微調框的整數值。 |
int minimum() const |
獲取微調框的最小值。 |
void setMinimum(int min) |
設置微調框的最小值。 |
int maximum() const |
獲取微調框的最大值。 |
void setMaximum(int max) |
設置微調框的最大值。 |
int singleStep() const |
獲取單步步進值,即微調框在每次增減操作時的變化量。 |
void setSingleStep(int step) |
設置單步步進值。 |
int prefix() const |
獲取首碼(顯示在值之前的文本)。 |
void setPrefix(const QString &prefix) |
設置首碼。 |
int suffix() const |
獲取尾碼(顯示在值之後的文本)。 |
void setSuffix(const QString &suffix) |
設置尾碼。 |
QString cleanText() const |
獲取文本表示的乾凈值,即不包含首碼和尾碼的純文本值。 |
bool wrapping() const |
檢查微調框是否啟用了迴圈,即在達到最大或最小值時是否繞回。 |
void setWrapping(bool on) |
啟用或禁用微調框的迴圈。 |
void stepUp() |
將微調框的值增加一個單步步進值。 |
void stepDown() |
將微調框的值減少一個單步步進值。 |
void setAccelerated(bool on) |
啟用或禁用加速,即按住上下箭頭時值的變化速度是否逐漸加快。 |
bool isAccelerated() const |
檢查是否啟用了加速。 |
void setReadOnly(bool ro) |
設置微調框為只讀模式,禁止用戶編輯值。 |
bool isReadOnly() const |
檢查微調框是否為只讀模式。 |
void setAlignment(Qt::Alignment align) |
設置微調框中文本的對齊方式。 |
Qt::Alignment alignment() const |
獲取微調框中文本的對齊方式。 |
void setButtonSymbols(QAbstractSpinBox::ButtonSymbols bs) |
設置增減按鈕的顯示方式。 |
QAbstractSpinBox::ButtonSymbols buttonSymbols() const |
獲取增減按鈕的顯示方式。 |
這些方法涵蓋了QSpinBox
類中一些常用的設置和獲取整數微調框屬性的功能。
接下來我將用一個簡單的案例展示如何使用SpinBox
組件,該組件有兩個版本SpinBox()
用於展示單精度浮點數,而DoubleSpinBox()
則可以展示精度更高的數值,需要註意的是,該組件有兩個特殊參數,當使用setPrefix()
時可以指定在前方加入特殊符號,而使用setSuffix()
時則可以在後方追加特殊符號,我們就以後方追加為例,首先繪製一個窗體;
要實現計算流程很簡單,只需要在按鈕被觸發時直接調用on_pushButton_clicked()
按鈕事件即可,其核心代碼如下所示;
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 在組件後方設置$特殊符號
ui->spinBox->setSuffix(" $");
ui->spinBox_2->setSuffix(" $");
ui->doubleSpinBox->setSuffix(" $");
// 設置顯示精度
ui->doubleSpinBox->setDecimals(6);
}
MainWindow::~MainWindow()
{
delete ui;
}
// 觸發計算流程
void MainWindow::on_pushButton_clicked()
{
int x = ui->spinBox->value();
int y = ui->spinBox_2->value();
double total = x+y;
// 設置SpinBox數值(設置時無需轉換)
ui->doubleSpinBox->setValue(total);
}
我們繼續在SpinBox
的基礎上改進,如上代碼中每次都需要點擊計算按鈕才能出結果,此時的需求是當SpinBox
中的參數發生變化時自定的完成計算,這裡就需要用到信號和槽了,當SpinBox
被修改後,自動觸發計算信號實現計算。該需求很容易被實現,只需要將信號綁定到特定的槽函數上即可,核心代碼如下所示;
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 在組件後方設置$特殊符號
ui->spinBox->setSuffix(" $");
ui->spinBox_2->setSuffix(" $");
ui->doubleSpinBox->setSuffix(" $");
// 設置顯示精度
ui->doubleSpinBox->setDecimals(6);
// 始終不可編輯
ui->doubleSpinBox->setEnabled(false);
// 將數量和單價兩個SpinBox的valueChanged()信號與on_pushButton_clicked()槽關聯
// 只要spinBox中的內容發生變化,則立即觸發按鈕完成計算
QObject::connect(ui->spinBox,SIGNAL(valueChanged(int)),this,SLOT(on_pushButton_clicked()));
QObject::connect(ui->spinBox_2,SIGNAL(valueChanged(int)),this,SLOT(on_pushButton_clicked()));
QObject::connect(ui->doubleSpinBox,SIGNAL(valueChanged(double)),this,SLOT(on_pushButton_clicked()));
}
編譯並運行上述程式,當我們的兩個選擇框其中一個發生變化時,都會自動觸發信號與on_pushButton_clicked()
實現計算,效果圖如下;
本博客所有文章除特別聲明外,均採用 BY-NC-SA 許可協議。轉載請註明出處!