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::Checked 、Qt::Unchecked 和Qt::PartiallyChecked 。 |
checkState() const |
獲取單選按鈕的選中狀態,返回Qt::Checked 、Qt::Unchecked 或Qt::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;
}
}