C++ Qt開發:RadioButton單選框分組組件

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

Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹`QRadioButton`單選框組件以及與之交互的`QButtonGroup`類的常用方法及靈活運用。`QRad... ...


Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹QRadioButton單選框組件以及與之交互的QButtonGroup類的常用方法及靈活運用。

QRadioButton是Qt框架中的一個部件(Widget),用於提供單選按鈕的界面元素。單選按鈕允許用戶從多個互斥的選項中選擇一個,通常用於表示一組相關但互斥的選項。

以下是QRadioButton的一些常用方法,以表格形式概述:

方法 描述
QRadioButton(QWidget *parent = nullptr) 構造函數,創建一個單選按鈕,可指定父部件。
setText(const QString &text) 設置單選按鈕的文本標簽。
text() const 獲取單選按鈕的文本標簽。
setChecked(bool checked) 設置單選按鈕的選中狀態,true表示選中,false表示未選中。
isChecked() const 判斷單選按鈕是否處於選中狀態。
setAutoExclusive(bool enabled) 設置是否自動將同一組中的其他單選按鈕設為未選中狀態。
setObjectName(const QString &name) 設置對象名稱,用於樣式表等。
setCheckedState(Qt::CheckState state) 設置單選按鈕的選中狀態,可選值有Qt::CheckedQt::UncheckedQt::PartiallyChecked
checkState() const 獲取單選按鈕的選中狀態,返回Qt::CheckedQt::UncheckedQt::PartiallyChecked
toggled(bool checked) 信號,當單選按鈕的選中狀態發生改變時觸發。參數checked表示是否選中。
click() 模擬點擊單選按鈕,觸發點擊事件。
setDisabled(bool disable) 設置單選按鈕是否被禁用,true表示禁用,false表示啟用。
setEnabled(bool enable) 設置單選按鈕是否啟用,true表示啟用,false表示禁用。
blockSignals(bool block) 阻塞或解除阻塞信號與槽的連接,用於在某些操作時臨時禁用信號槽。

這些方法提供了對QRadioButton的一些基本操作,包括設置文本、選中狀態、信號與槽等。通過這些方法,可以在應用程式中方便地創建和控制單選按鈕。總而言之,QRadioButton是一種簡單而有效的界面元素,用於在多個互斥的選項中進行單一選擇。

談到QRadioButton組件就不得不提起QButtonGroup類,因為這兩者通常是需要組合在一起使用的,一般來說QButtonGroup用於管理一組按鈕,通常是單選按鈕(QRadioButton)或覆選按鈕(QCheckBox)。它為這組按鈕提供了一些便捷的方法,方便進行管理和操作。

首先我們需要在mainwindow.h頭文件中手動增加一個槽函數的聲明,該槽函數用於觸發後的處理工作。

private slots:
    void MySlots();

其次在主程式mainwindow.cpp中我們通過new QBUttonGroup新建一個按鈕組,並將其加入到group_sex組內,創建信號和槽的綁定,將信號全部綁定到MySlots()槽函數上,如下所示;

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMessageBox>
#include <QButtonGroup>
#include <iostream>

// 定義全局組變數
QButtonGroup *group_sex;

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 將RadioButton放入ButtonGroup組中
    group_sex = new QButtonGroup(this);
    group_sex->addButton(ui->radioButton_male,0);
    group_sex->addButton(ui->radioButton_female,1);
    group_sex->addButton(ui->radioButton_unknown,2);

    // 設置預設選中
    ui->radioButton_unknown->setChecked(true);

    // 綁定信號和槽
    connect(ui->radioButton_male,SIGNAL(clicked(bool)),this,SLOT(MySlots()));
    connect(ui->radioButton_female,SIGNAL(clicked(bool)),this,SLOT(MySlots()));
    connect(ui->radioButton_unknown,SIGNAL(clicked(bool)),this,SLOT(MySlots()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

// 手動創建一個槽函數
void MainWindow::MySlots()
{
    switch(group_sex->checkedId())
    {
    case 0:
        std::cout << "male" << std::endl;
        QMessageBox::information(nullptr, "信息", "用戶選中了男", QMessageBox::Ok);
        break;
    case 1:
        std::cout << "female" << std::endl;
        QMessageBox::information(nullptr, "信息", "用戶選中了女", QMessageBox::Ok);
        break;
    case 2:
        std::cout << "unknown" << std::endl;
        QMessageBox::information(nullptr, "信息", "用戶選中了未知", QMessageBox::Ok);
        break;
    }
}

當程式運行後,讀者可自行選擇不同的單選框,此時會彈出不同的提示信息,如下圖;

當然如果讀者不想使用QButtonGroup對單選框進行分組操作,同樣可以實現判斷選中狀態,通過依次檢查isChecked()單選框的狀態即可實現,但是此類方式並不推薦使用。

void MainWindow::on_pushButton_clicked()
{
    if(ui->radioButton_male->isChecked() == true)
    {
        std::cout << "選中男" << std::endl;
    }
    if(ui->radioButton_female->isChecked() == true)
    {
        std::cout << "選中女" << std::endl;
    }
    if(ui->radioButton_unknown->isChecked() == true)
    {
        std::cout << "選中未知" << std::endl;
    }
}
文章出處:https://www.cnblogs.com/LyShark/p/17895152.html
本博客所有文章除特別聲明外,均採用 BY-NC-SA 許可協議。轉載請註明出處!
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天,我們來看這麼一個非常常見的切圖場景,我們需要一個帶圓角的虛線邊框,像是這樣: 這個我們使用 CSS 還是可以輕鬆解決的,代碼也很簡單,核心代碼: div { border-radius: 25px; border: 2px dashed #aaa; } 但是,原生的 dashed 有一個問題, ...
  • 題目:輸入兩個正整數 m 和 n,求其最大公約數和最小公倍數。 求出最大公約數就行,最小公倍數用m*n除以最大公約數就行 package myself; import java.util.Scanner; /** * @Auther QY * @Date 2023/12/11 */ public c ...
  • 開始 日期格式化可以說是最常用的一個小知識了,例如格式化成"年-月-日"、"年-月-日 時-分-秒"、“年/月/日”等等,隨之也就出現了“yyyy-MM-dd”、"yyyy-MM-dd HH-mm-ss"等格式,使用不當就會一臉懵逼。 運行 public static void main(Strin ...
  • Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹CheckBox單行輸入框組件的常用方法及靈活運用。QCheckBox是 Qt 中用於實現覆選框的組件,它提供了豐... ...
  • 隨著金融科技的不斷發展,越來越多的線上查詢工具被應用到汽車管理領域。一款名為汽車管理線上查詢工具,定位車輛,輕鬆追蹤的工具就是其中之一。此工具通過API介面代碼實現了車牌號查車輛信息、車輛故障碼、VIN查詢汽車品牌以及二手車估值等功能,為用戶提供了準確、便捷、高效的汽車管理服務。 首先,車牌號查車輛 ...
  • 數據的預處理是數據分析,或者機器學習訓練前的重要步驟。通過數據預處理,可以 提高數據質量,處理數據的缺失值、異常值和重覆值等問題,增加數據的準確性和可靠性 整合不同數據,數據的來源和結構可能多種多樣,分析和訓練前要整合成一個數據集 提高數據性能,對數據的值進行變換,規約等(比如無量綱化),讓演算法更加 ...
  • 1. 同城雙活是什麼 同城雙活是一種容災架構的設計模式,主要用於提高系統的可用性和容錯性。它通常涉及在同一個城市內建立兩個數據中心(機房),這兩個數據中心同時對外提供服務,實現了高可用性和冗餘。 關鍵特點和優勢包括: 雙活部署: 兩個數據中心都處於活躍狀態,同時處理用戶請求。這樣,當一個數據中心發生 ...
  • 公司某規則引擎系統,在每次發版啟動會手動預熱,預熱完成當流量切進來之後會偶發的出現一次長達1-2秒的Young GC(流量並不大,並且LB下的每個節點都會出現該情況)在這次長暫停之後,每一次的年輕代GC暫停時間又都恢覆在20-100ms以內2秒雖然看起來不算長吧,但規則引擎每次執行也才幾毫秒,這誰能... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...