提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
本文介绍QT常用控件的第四个按钮,QCheckBox 按钮编程。通过这个例子,进一步巩固QT管理资源机制,学习QCheckBox 复选框的三态功能和如何分组管理QCheckBox 复选框 。项目演示如何使用默认的分组和 QButtonGroup 进行多选设置。项目使用样式表文件进行外观设置。
文章中使用的例程和内容都是在chatgpt的帮助下完成的,例程经过测试通过。
感谢朋友提供的chatgpt软件,特别是其中的gpt-box桌面工具,更是我离不开的工具。感兴趣的同仁可前往一观(apsuai.com)。
我们的调试环境仍然是双架构Kits
,编译调试在当前的ubuntu(qt5)中进行,重新编译后下载到目标arm设备(qt4)中运行。
我们的编程环境为:Ubuntu64位系统(22.04),目标架构:(1)qt5 x86_64
架构,(2)qt4 32位arm
架构。
环境配置请参见《Qt常用的按钮控件编程(一)》第1节。
6、QCheckBox
按钮
QCheckBox是Qt框架中的一个控件类,它代表了一个复选框,用于允许用户对一组选项进行多项选择。QCheckBox通常出现在界面上的选项列表或设置界面中。
QCheckBox继承自QAbstractButton类,因此它具有与其他按钮控件相同的属性和方法。例如,可以使用setChecked()方法设置QCheckBox的选中状态,并使用text()方法获取显示文本。
QCheckBox还提供了一些额外的功能,例如支持三态状态(即“选中”、“未选中”和“半选中”)和部分透明度。可以通过setTristate()方法启用三态状态,或通过setCheckState()方法设置其状态。另外,可以使用setOpacity()方法设置QCheckBox的不透明度。
下面是几个常用的QCheckBox方法:
-
setText(const QString &text):设置QCheckBox的显示文本。
-
setChecked(bool checked):设置QCheckBox的选中状态。
-
isChecked():返回QCheckBox的选中状态。
-
setTristate(bool y):启用/禁用QCheckBox的三态状态。
-
setCheckState(Qt::CheckState state):设置QCheckBox的选中状态,包括Qt::Checked、Qt::Unchecked和Qt::PartiallyChecked。
- checkState():返回QCheckBox的选中状态,包括Qt::Checked、Qt::Unchecked和Qt::PartiallyChecked。
6.1 例程功能和程序执行效果
创建一个基于 Qt QCheckBox 按钮c++例程,项目名称"_qcheckbox" ,不使用拖取控件,控件全部采用编程。主窗口上放置三个QCheckBox 按钮分为两组:
- 第一组:一个按钮,是一个三态复选框,三种状态为选中,未选中,半选中;
- 第二组:两个按钮,放在QButtonGroup 控件中,可以多选,有选中、未选中两种状态;
- 程序包括三个控件的响应函数(两个槽函数)。
- 编译完成后生成两个同名可执行程序_qcheckbox,一个使用使用Qt4库,运行在arm架构设备,另一个使用Qt5库,运行在当前ubuntu系统。
程序执行效果:
(1)程序启动后效果:
(2)点击后执行效果(其中之一):
6.2 生成项目
打开 Qt Creator 并创建一个新的 应用程序项目_qcheckbox,选择Widget作为基类,不要勾选“Generate form”,,不使用拖取控件,控件全部采用编程,将两个配置好的Kits同时选上,项目新建完成如下图。(详细的项目新建过程参见:《Qt常用的按钮控件编程(一)》)。
6.3 添加资源文件
在本例程的项目目录的images 文件夹中准备了3张图片(如下图),下面的步骤演示了如何将资源添加到项目中。
6.3.1 添加图片资源
- 在项目目录中右键点击 Resources 目录,选择 Add New… ,并选择 Qt -> Qt Resource File。
- 输入资源文件的名称(自行定义)和位置,然后点击“下一步”。
在 Qt Creator 中新建资源文件后,默认会进入 res.qrc 文件编辑模式(如果关闭了,可以右键这个文件点击选择“Open in Editor”),为了方便分类管理文件,我们可以使用 Add Prefix 功能为资源文件添加前缀,前缀的格式应该为类似文件系统中的路径格式,例如 /images。
为了确保路径正确,前缀中的 / 是必需的,它在资源文件引用时是路径分隔符,起到类似 Linux 下根节点的作用,我们现在第⑪处添加了前缀/。
添加了前缀后,我们添加资源图片,放在/images 前缀的下面。这里我们导入在本项目路径 images 文件夹中的3张图片,添加完成需要按“Ctrl + S”保存 res.qrc 才会看到左边的结果。添加完成如下图。
6.3.2 添加 qss
文件
QSS 文件是使用 Qt 程序相关联的样式表文件。它由 GUI 元素的外观和感觉,包括布局,颜色,鼠标的行为,大小和字体。它的风格,一个可以合并到一个 UI(用户界面)。与 HTML 的 CSS 类似,Qt 的样式表是纯文本的格式定义,在应用程序运行时可以载入和解析这些样式定义,从而使应用程序的界面呈现不同的效果。
如上图加入一个空白文件,新建的文件名 style.qss 文件,如下图,默认添加到项目的路径下,后面步骤采用默认,直至完成。
编辑style.qss,保存,最后完成的项目如下图所示:
第 10 行、第 13 行,第16行,设置 QCheckBox 的 indicator 的背景图片。这样当它们点击切换时就
会看到 QCheckBox 的三种选择状态了。
style.qss文件内容(方便拷贝):
QCheckBox{
spacing: 5px;
color: white;
}
QCheckBox::indicator {
width: 50px;
height: 50px;
}
QCheckBox::indicator:enabled:unchecked {
image: url(:/images/unchecked.png);
}
QCheckBox::indicator:enabled:checked {
image: url(:/images/checked.png);
}
QCheckBox::indicator:enabled:indeterminate {
image: url(:/images/indeterminate.png);
}
6.4 完成代码编辑
6.4.1 修改项目文件 _radiobutton.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
widget.h
# Default rules for deployment.
qnx: target.path = /tmp/$${
TARGET}/bin
else: unix:!android: target.path = /opt/$${
TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES += \
res.qrc
# 根据使用的 Qt 版本设置编译条件
greaterThan(QT_MAJOR_VERSION, 4) {
# 如果使用的是 Qt 5 或者更新版本
message("使用的是 Qt 5版本")
} else {
# 如果使用的是 Qt 4 或者更早的版本