Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹CheckBox單行輸入框組件的常用方法及靈活運用。QCheckBox是 Qt 中用於實現覆選框的組件,它提供了豐... ...
Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹CheckBox
單行輸入框組件的常用方法及靈活運用。
QCheckBox
是 Qt 中用於實現覆選框的組件,它提供了豐富的功能和靈活性。與之前文章中的RadioButton
組件不同,CheckBox
組件支持多項選擇以及三態支持,即可以是選中、未選中或半選中的狀態。
下麵是QCheckBox
的主要方法的概述和表格形式:
方法名 | 描述 |
---|---|
QCheckBox(QWidget *parent = nullptr) |
構造函數,創建一個 QCheckBox 組件。 |
isChecked() const |
返回覆選框的當前狀態,選中返回 true,否則返回 false。 |
setCheckState(Qt::CheckState state) |
設置覆選框的狀態,可以是 Qt::Unchecked、Qt::PartiallyChecked 或 Qt::Checked。 |
checkState() const |
返回覆選框的當前狀態,枚舉類型 Qt::CheckState。 |
setTristate(bool) |
啟用或禁用三態覆選框的功能。 |
isTristate() const |
返回是否啟用了三態覆選框的功能。 |
setCheckable(bool checkable) |
設置覆選框是否可以被選中,true 表示可以選中,false 表示不能選中。 |
isChecked() const |
返回覆選框的當前狀態,選中返回 true,否則返回 false。 |
setChecked(bool check) |
設置覆選框的狀態,true 表示選中,false 表示未選中。 |
text() const |
返回覆選框的文本標簽。 |
setText(const QString &text) |
設置覆選框的文本標簽。 |
stateChanged(int) |
覆選框狀態變化時發射的信號,參數是枚舉類型 Qt::CheckState,可以是 Qt::Unchecked、Qt::PartiallyChecked 或 Qt::Checked。 |
這裡分別演示一下選擇框組件的使用方法,首先展示如何設置三態選擇框,然後再展示一下如何通過一個選擇框控制子選擇框的狀態,如下圖是該程式的佈局。
首先在主構造函數MainWindow
中通過使用setTristate()
將前三個半選框設置為三態狀態,並使用setEnabled()
將前三個選擇框設置為可選擇狀態,代碼如下所示;
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 啟用三態狀態並設置為可選擇
ui->checkBox_a->setTristate();
ui->checkBox_b->setTristate();
ui->checkBox_c->setTristate();
// 設置為可選狀態
ui->checkBox_a->setEnabled(true);
ui->checkBox_b->setEnabled(true);
ui->checkBox_c->setEnabled(true);
}
MainWindow::~MainWindow()
{
delete ui;
}
接著我們分別為三個選擇框配置選擇事件,通過在半選框中右鍵選中stateChanged(int)
點擊確定跳轉到選擇框的事件中來,在事件中int state
參數則代表選擇框傳回的狀態碼,通過判斷狀態碼Qt::Checked
則代表選中、Qt::PartiallyChecked
代表半選中、Qt::Unchecked
代表未選中。
// 設置第一個選擇框
void MainWindow::on_checkBox_a_stateChanged(int state)
{
// 選中狀態
if (state == Qt::Checked)
{
ui->checkBox_a->setText("選中");
}
// 半選狀態
else if(state == Qt::PartiallyChecked)
{
ui->checkBox_a->setText("半選中");
}
// 未選中
else if(state == Qt::Unchecked)
{
ui->checkBox_a->setText("未選中");
}
// 否則恢復預設值
else
{
ui->checkBox_a->setText("半選框1");
}
}
// 設置第二個選擇框
void MainWindow::on_checkBox_b_stateChanged(int state)
{
// 選中狀態
if (state == Qt::Checked)
{
ui->checkBox_b->setText("選中");
}
// 半選狀態
else if(state == Qt::PartiallyChecked)
{
ui->checkBox_b->setText("半選中");
}
// 未選中
else if(state == Qt::Unchecked)
{
ui->checkBox_b->setText("未選中");
}
// 否則恢復預設值
else
{
ui->checkBox_b->setText("半選框2");
}
}
// 設置第三個選擇框
void MainWindow::on_checkBox_c_stateChanged(int state)
{
// 選中狀態
if (state == Qt::Checked)
{
ui->checkBox_c->setText("選中");
}
// 半選狀態
else if(state == Qt::PartiallyChecked)
{
ui->checkBox_c->setText("半選中");
}
// 未選中
else if(state == Qt::Unchecked)
{
ui->checkBox_c->setText("未選中");
}
// 否則恢復預設值
else
{
ui->checkBox_c->setText("半選框3");
}
}
至此,當選擇不同的選擇框時則可以切換到不同的選擇狀態,如下圖;
接著來說說如何實現清除選擇框的狀態,當用戶點擊清除狀態時,首先我們要做的就是調用isChecked()
來檢查每一個選擇框是否被選中,如果是則通過setChecked()
將屬性設置為false
即可,通過這種方式也可以實現對特定選擇框狀態的父子關聯,代碼如下所示;
// 清除選中狀態
void MainWindow::on_pushButton_clicked()
{
// 獲取選擇框狀態
int checka = ui->checkBox_a->isChecked();
int checkb = ui->checkBox_b->isChecked();
int checkc = ui->checkBox_c->isChecked();
// 依次重置
if(checka == true)
{
ui->checkBox_a->setChecked(false);
}
if(checkb == true)
{
ui->checkBox_b->setChecked(false);
}
if(checkc == true)
{
ui->checkBox_c->setChecked(false);
}
}
// 設置選中全部子框
void MainWindow::on_checkBox_d_stateChanged(int state)
{
// 選中所有子框
if(state == Qt::Checked)
{
ui->checkBox_e->setChecked(true);
ui->checkBox_f->setChecked(true);
ui->checkBox_g->setChecked(true);
ui->checkBox_g->setChecked(true);
ui->checkBox_h->setChecked(true);
}
// 取消子框全選狀態
if(state == Qt::Unchecked)
{
ui->checkBox_e->setChecked(false);
ui->checkBox_f->setChecked(false);
ui->checkBox_g->setChecked(false);
ui->checkBox_g->setChecked(false);
ui->checkBox_h->setChecked(false);
}
}
當讀者選擇選中全部子框按鈕時,則底部的四個CheckBox
將會聯動,如下圖所示;
本博客所有文章除特別聲明外,均採用 BY-NC-SA 許可協議。轉載請註明出處!