C++ Qt開發:SpinBox數值微調框組件

来源:https://www.cnblogs.com/LyShark/archive/2023/12/12/17895090.html
-Advertisement-
Play Games

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

文章出處:https://www.cnblogs.com/LyShark/p/17895090.html
本博客所有文章除特別聲明外,均採用 BY-NC-SA 許可協議。轉載請註明出處!
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • static:靜態定位(預設)。依據文檔流定位。 relative:相對定位。以自身為基準,設置坐標(left、top、right、bottom),不脫離文檔流。 absolute:絕對定位。以父元素為基準,設置坐標(left、top、right、bottom),脫離文檔流。 fixed:固定定位。... ...
  • 介紹 在使用nest創建項目時,預設使用webpack進行打包,有時候啟動項目需要1-2分鐘。所以希望採用vite進行快速啟動項目進行開發。 本文主要使用NestJs、Vite和swc進行配置。文章實操較多,概念性的東西可訪問對應的官方文檔進行瞭解。tips: 個人認為概念性的東西,在文章中指出。對 ...
  • 面向對象編程是一種強大而靈活的編程範式,它可以幫助我們更好地組織和管理代碼,提高代碼的可讀性和可維護性,這使得它特別適合用在大型工程項目中。然而,我們也需要註意其可能帶來的問題,尤其是在併發和複雜系統中。 ...
  • 背景及問題: 在與硬體打交道時,經常需要知道當前設備連接的硬體信息,以便連接正確的硬體,比如串口通訊查詢連接的硬體及埠,一般手工的方式就是去設備管理器查看相應的信息,應用程式如何讀取這一部分信息呢,Windows下的SetupAPI系列就可以解決這個問題 示常式序 #include<Windows ...
  • C 語言中的函數聲明和定義 您可以通過以下方式創建並調用函數: // 創建一個函數 void myFunction() { printf("我剛被執行了!"); } int main() { myFunction(); // 調用函數 return 0; } 一個函數包括兩個部分: 聲明:函數名稱、 ...
  • 寫在前面 最近看到稀土掘金在搞2023年終總結徵文活動,一直想嘗試投稿試試,周末我就花了近一下午時間寫完初稿,然後周一、周二完成精讀再改稿,感覺OK,昨晚凌晨第一時間在稀土掘金投稿。 結果,又發生了同樣的事情。 同樣的文章,在博客園上、公號上閱讀量很OK,在稀土掘金上就上不來。 這應該是我博客園第四 ...
  • 從0到1,手把手帶你使用QT的qInstallMessageHandler函數結合qDebug,qInfo實現自定義的日誌系統,支持輸出日誌到文件和控制台,支持自動檢測日誌文件大小,支持自動更新日誌文件修改日期,自動備份,自動刪除一個月前的日誌文件,支持多線程程式, 支持擴展,可輸出日誌到資料庫,網... ...
  • 背景 公司的海外業務需要將雲上的操作讀取到內部的日誌文件中,永久保存,供內部審計使用。 由於之前沒有用過AWS相關的SDK,在使用過程中也遇到一些困難,這裡記錄一下,並且總結一下過程。 代碼 快速開始 代碼參考地址:https://github.com/awsdocs/aws-doc-sdk-exa ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...