前言
从本文开始,我们系列文章开始介绍Qt输入窗口部件编程。本文介绍QComboBox组合框和 QFontComboBox字体组合框编程。通过这个例子,继续巩固QT的信号与槽知识,了解qt4与qt5信号与槽函数的连接方式的不同。
本例程设计是在chatgpt的帮助下完成的,编译代码经过测试通过。
感谢朋友提供的chatgpt软件,特别是其中的gpt-box桌面工具,更是我离不开的工具。感兴趣的同仁可前往一观( www.apsuai.com)。
我们的调试环境仍然是双架构Kits
,编译调试在当前的ubuntu(qt5)中进行,重新编译后下载到目标arm设备(qt4)中运行。
我们的编程环境为:Ubuntu64位系统(22.04),目标架构:
(1) qt5 x86_64
架构;
(2)qt4 32位arm
架构。
环境配置请参见《Qt常用的按钮控件编程(一)》第1节。
1、 Qt常用的输入窗口控件
- Comb Box:组合框
- Font Comb Box:字体组合框
- Line Edit:单行编辑框
- Text Edit:文本编辑框
- Plain Text Edit:纯文本编辑框
- Spin Box:数字旋转框
- Double Spin Box:双精度数字旋转框
- Time Edit:时间编辑框
- Date Edit:日期编辑框
- Date/Time Edit:日期时间编辑框
- Dial:数字拨盘框
- Horizontal Scroll Bar:水平滚动条
- Vertical Scroll Bar:垂直滚动条
- Horizontal Slider:水平滑动条
- Vertical Slider:垂直滑动条
- Key sequence Edit:按键序列编辑框
在以后编程示例中我们会详细介绍这些控件。
2、QFontComboBox 和 QComboBox控件编程
2.1 控件简介
2.1.1 QComboBox组合框
QComboBox是Qt中的一个控件类,用户可以从下拉列表中选择一个值。当用户点击下拉箭头,一个列表就会展开,以显示可用选项。用户可以从列表中选择一个选项,所选选项将作为组合框的当前值。
QComboBox是一个强大的组合框控件,可以用于在GUI中选择从一组值中选择的值。例如,在绘图应用中,可以使用QComboBox来选择画笔颜色、字体、线型等。QComboBox也可以用于选择文件格式、数据源等。
以下是QComboBox的一些常用函数和信号:
- addItem(text: str, userData: Any = None): 向下拉列表框中添加一个选项。
- removeItem(index: int): 从下拉列表框中移除指定的选项。
- clear(): 清除下拉列表框中的所有选项。
- currentTextChanged(text: str): 当用户选择新选项时,发出此信号。
2.1.2 QFontComboBox字体组合框
QFontComboBox是QComboBox类的一个子类,继承了QComboBox的所有功能。QFontComboBox是Qt为了方便开发者使用而提供的一个特殊控件,可以将其视为Qt的语法糖
。它大大简化开发过程,并使代码更易于理解和维护,但其实它内部实现并不简单,需要扫描操作系统中所有已安装的字体,并格式化这些字体进行显示,同时提供信号来捕获所选字体的更改。
2.2 例程功能设计
向chatgpt提出的要求如下:
“使用Qt Creator 创建一个c++例程,项目名称"_qcombobox" ,基类不选默认MainWindow类,而选择Widget作为基类,不要勾选“Generate form”,不使用拖取控件,控件全部采用编程。主窗口大小800*480。在主窗口上,放置一个 QComboBox控件控件用来选择颜色,放置一个 QFontComboBox 控件用来选择字体,选择后,用槽函数将综合选择的结果体现在一个QTextEdit控件中。“
chatgpt根据要求给出了完整的例程,经过少量调整就能满足我们的需求。
2.3 例程执行效果
在主窗口上,左上放置一个 QComboBox控件,点击后显示的下拉框可以改变下部文本框(QTextEdit控件)选中
文本的颜色,右上放置一个QFontComboBox控件,点击后出现许多中文字体可供选择,选中其中之一,文本框中的全部内容会按照选择的字体发生改变,如下图:
2.4 生成项目
使用Qt Creator 创建一个c++例程,项目名称"_qcombobox" ,不选默认MainWindow类,选择Widget作为基类,不要勾选“Generate form”,不使用拖取控件,控件全部采用编程。将两个配置好的Kits同时选上,项目新建完成如下图。(详细的项目新建过程参见:《Qt常用的按钮控件编程(一)》)。
点击左侧的Debug选项,可以看到两个编译套件Kit,可以选择编译运行在不同平台上的可执行文件,arm-v7为arm架构的设备,使用Qt4库,而桌面则是当前ubuntu系统,使用Qt5。
2.5 代码编辑
2.5.1 修改项目文件_qcombobox.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
# 根据使用的 Qt 版本设置编译条件
greaterThan(QT_MAJOR_VERSION, 4) {
# 如果使用的是 Qt 5 或者更新版本
message("使用的是 Q