QT6中Combo Box与Combo BoxFont 功能及用法
一.QComboBox(通用下拉组合框)
1.核心功能与特点
QComboBox 是 “下拉列表 + 输入框” 的组合控件,支持两种模式:
非编辑模式:用户只能从下拉列表中选择预设选项(默认模式);
编辑模式:用户可直接在输入框中输入内容,或从下拉列表选择。
其核心能力包括:
动态添加 / 删除下拉项(支持文本、图标、自定义控件);
设置默认选中项、禁用特定项;
响应选中项变化、编辑内容变化等事件;
支持分组显示下拉项(通过 QStandardItemModel 实现)。
2.QComboBox 代码示例
// 创建 ComboBox
QComboBox *comboBox = new QComboBox(this);
comboBox->setWindowTitle("QComboBox Example");
comboBox->resize(300, 30);
// 添加单项
comboBox->addItem("Option 1","北京"); //"北京" 类似注释,但程序可以读取
comboBox->addItem("Option 2","天津");
comboBox->addItem("Option 3","上海");
// 或者使用 addItems 批量添加
QStringList items;
items << "Red" << "Green" << "Blue";
comboBox->addItems(items);
// 连接信号:当选项改变时触发
QObject::connect(comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
[=](int index) {
qDebug() << "Selected index:" << index << ", Text:" << comboBox->itemText(index);
});
qDebug() <<"打印1:"<<comboBox->itemText(0)<<comboBox->itemData(0).toString();
qDebug() <<"打印2:"<<comboBox->itemText(1)<<comboBox->itemData(1).toString();
3.说明
(1)comboBox->addItem("Option 1","北京"); //"北京" 类似注释,但程序可以读取
但designer界面模式没有此功能
(2)cityComboBox->addItem(QIcon(":/icons/beijing.png"), "北京", "中国首都,政治文化中心"); //向下拉框添加项(部分带图标)
designer界面模式下,属性中可以直接选择自带的图标
二.QFontComboBox(字体下拉组合框)
1.核心功能与特点
QFontComboBox 是 QComboBox 的子类,专门用于字体选择,无需手动添加字体列表 —— 它会自动加载系统中已安装的字体,并以 “字体名称 + 示例文本” 的形式显示,核心特点:
自动枚举系统字体,支持过滤(如仅显示等宽字体、中文字体);
选中字体后可直接获取 QFont 对象(包含字体名称、大小、样式);
支持设置 “示例文本”(默认显示 “Abc”,可自定义为中文如 “字体示例”);
继承 QComboBox 的所有功能(如可编辑、信号槽)。
2.常用字体过滤规则
QFontComboBox::AllFonts:显示所有字体(默认);
QFontComboBox::ScalableFonts:仅显示可缩放字体;
QFontComboBox::NonScalableFonts:仅显示不可缩放字体;
QFontComboBox::MonospacedFonts:仅显示等宽字体(如 Consolas、Courier New);
QFontComboBox::ProportionalFonts:仅显示比例字体(如宋体、Arial)。
3.代码示例
// 创建 FontComboBox
QFontComboBox *fontCombo = new QFontComboBox(this);
// 设置字体过滤器:只显示可缩放字体
fontCombo->setFontFilters(QFontComboBox::AllFonts); // 可选设置
// 也可设置为其他过滤器,如 QFontComboBox::AllFonts, QFontComboBox::MonospacedFonts 等
fontCombo->setGeometry(50, 200, 200, 30);
// 创建一个标签来显示字体效果
QLabel *label = new QLabel(this);
label->setText("Hello, Qt 6!");
label->setAlignment(Qt::AlignLeft);
label->setGeometry(50, 100, 200, 50);
// 连接信号:当字体改变时更新标签字体
QObject::connect(fontCombo, &QFontComboBox::currentFontChanged,
[=](const QFont &font) {
// 设置新字体,可以同时设置点大小等属性
QFont newFont = font;
newFont.setPointSize(20); // 设置字体大小
label->setFont(newFont);
qDebug() << "Current font:" << font.family();
});
resize(800, 600);
三.应用场景总结
当需要用户选择 “自定义选项”(如性别、部门、文件类型)时,用 QComboBox;
当需要用户选择 “字体”(如文本编辑器的字体设置、报表设计的字体配置)时,用 QFontComboBox(无需手动维护字体列表,效率更高)。