文章目录
- 概要
-
- [1、QCheckBox 的基本概念](#1、QCheckBox 的基本概念)
- 2、单个QCheckBox
- 3、多个QCheckBox同时应用
- 3.1、实现效果
- 3.2、实现Demo
概要
在 Qt 应用程序开发中,QCheckBox 是一个常用的用户界面元素,它允许用户在两种状态(选中和未选中)之间进行切换,也可以设置为三态(选中、未选中、部分选中)。本文将详细介绍 QCheckBox 的使用方法。
1、QCheckBox 的基本概念
QCheckBox 继承自 QAbstractButton 类,它具有按钮的基本特性,同时又有自己独特的状态表示。用户可以通过鼠标点击或者键盘操作来改变其状态。在很多场景下,比如设置选项、选择功能等,QCheckBox 都发挥着重要作用。
2、单个QCheckBox
(1)、单个QCheckBox,通过信号"checked(bool)"获取当前QCheckBox是否被选中,bool为true为选中,否则反之;
cpp
QCheckBox *checkBox=new QCheckBox();
connect(checkBox,SIGNAL(clicked(bool)),this,SLOT(hdl_cBold(bool)));
3、多个QCheckBox同时应用
3.1、实现效果
QCheckBoxDemo
3.2、实现Demo
(1)、项目目录结构
(2)、Ui界面,借助QT工具,直接拖拽进画布,效果如下所示:
(3)、根据效果的代码实现如下所示:
cpp
//main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
cpp
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QCheckBox>
#include <QRadioButton>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPlainTextEdit>
#include <QButtonGroup>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
public:
void init(); //参数初始化
void cnnt(); //创建信号和槽函数的连接
public slots:
void hdl_checkBox(int id,bool checked);//字体样式切换
void hdl_radiButton(); //字体颜色切换
private:
Ui::MainWindow *ui;
QButtonGroup *m_fontColor; //创建QButtonGroup,将其封装
QButtonGroup *m_fontStyle;
};
#endif // MAINWINDOW_H
cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
init();
cnnt();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::init()
{
m_groupBox=new QButtonGroup;
m_groupBox->addButton(ui->rBlack,0);
m_groupBox->addButton(ui->rRed,1);
m_groupBox->addButton(ui->rBlue,2);
m_groupBox->setExclusive(true); //只能同时选择一个
ui->rBlack->setChecked(true);
ui->plainTextEdit->setPlainText(tr("\n Hello World\n\n It is my demo"));
QFont font;
font.setPointSize(15); //字体大小
ui->plainTextEdit->setFont(font);
}
void MainWindow::cnnt()
{
connect(m_fontStyle,QOverload<int,bool>::of(&QButtonGroup::buttonToggled),this,&MainWindow::hdl_checkBox);
connect(m_fontColor,QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),this,&MainWindow::hdl_radiButton);
}
//字体样式判断 qcheckbox
void MainWindow::hdl_checkBox(int id,bool checked)
{
switch (id) {
case 0:
{
QFont font=ui->plainTextEdit->font();
font.setUnderline(checked);
ui->plainTextEdit->setFont(font);
break;
}
case 1:
{
QFont font=ui->plainTextEdit->font();
font.setItalic(checked);
ui->plainTextEdit->setFont(font);
break;
}
case 2:
{
QFont font=ui->plainTextEdit->font();
font.setBold(checked);
ui->plainTextEdit->setFont(font);
break;
}
default:
break;
}
}
//字体颜色选择 qradiobutton
void MainWindow::hdl_radiButton()
{
QTextCharFormat fontColor;
switch (m_groupBox->checkedId()) {
case 0:
{
fontColor.setForeground(Qt::black);
ui->plainTextEdit->setStyleSheet("color:black");
break;
}
case 1:
{
fontColor.setForeground(Qt::red);
ui->plainTextEdit->setStyleSheet("color:red");
break;
}
case 2:
{
fontColor.setForeground(Qt::blue);
ui->plainTextEdit->setStyleSheet("color:blue");
break;
}
default:
break;
}
}