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()
實現計算,效果圖如下;