Qt的技巧笔记(二):ComboBox 下拉组合框组件

QComboBox控件简介

​ Qt是一个跨平台的C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ComboBox下拉组合框组件的常用方法及灵活运用。QComboBox适用于以下场景:

  • 选项较少:提供直观的交互体验;
  • 自定义样式:支持丰富的样式定制,适合美观界面需求。
  • 下拉菜单:如语言选择,地区选择和单位选择等。

​ 在Qt中,ComboBox(组合框)是一种常用的用户界面控件, 它提供了一个下拉列表,允许用户从预设的选项中选择一个。该组件提供了一种比较的方便方式让用户从预定义的选项中进行选择,一般来说ComboBox 会以按钮的形式在界面上,用户点击按钮后,会弹出一个下拉列表,其中包含预定义的选项。当然ComboBox 不仅局限于选择,也允许用户手动输入内容。 下面QComboBox类的一些常用方法的说明的,下列按照表格总结如下:

QComboBox的方法接口 描述
QComboBox(QWidget *parent = nullptr) 构造函数,创建一个组件对象。
addItem(const QString &text, const QVariant &userData = QVariant()) 向组件添加一个项,可以附带用户数据。
addItems(const QStringList &texts) 向组件添加多个项,使用字符串列表。 `
insertItem(int index, const QString &text, const QVariant &userData = QVariant()) 在指定索引处插入一个项。
insertItems(int index, const QStringList &texts) 在指定索引处插入多个项。
removeItem(int index) 移除指定索引处的项。
clear() 清除组件中的所有项。
setCurrentIndex(int index) 设置组件当前选择的项的索引。
currentText() 返回当前组件中显示的文本。
currentIndex() 返回当前组件中选择的项的索引。
count() 返回组件中项的总数。
itemText(int index) 返回指定索引处项的文本。
itemData(int index, int role = Qt::UserRole) 返回指定索引处项的用户数据。
setItemText(int index, const QString &text) 设置指定索引处项的文本。
setItemData(int index, const QVariant &value, int role = Qt::UserRole) 为指定索引处项设置额外的数据。
clearEditText() 清除组件的编辑文本。
setEditable(bool editable) 设置组件是否可编辑。如果可编辑,用户可以手动输入文本。
setMaxCount(int max) 设置组件中显示的最大项数。如果超过该数目,将出现垂直滚动条。
setMinimumContentsLength(int characters) 设置组件的最小内容长度,以便显示完整的项。
setModel(QAbstractItemModel *model) 设置组件的数据模型。通过模型,可以更灵活地管理组件中的项。
view() 返回组件的视图,允许对视图进行定制。
clear() 清除组件中的所有项。
showPopup() 打开组件的下拉列表。
hidePopup() 隐藏组件的下拉列表。
activated(int index) 信号,当用户选择组件中的项时发出。
currentIndexChanged(int index) 信号,当组件中的当前项发生变化时发出。
setEditable(bool editable) 设置是否允许用户输入自定义文本
setStyleSheet(const QString &styleSheet) 设置样式表

上述这些方法提供了对ComboBox进行配置、管理和与之交互的灵活性。你可以根据具体的应用需求使用这些方法,使ComboBox在你的Qt应用程序中按照期望的方式工作。

核心信号 说明
activated(int)activated(const QString &text) 当用户选择了一个选项时发出这个时候相当于用户点开下拉框,并且鼠标划过某个选项,此时还没有确认做出选择。
currentIndexChanged(int)currentIndexChanged(const QString &text) 当前选项改变发出,此时用户已经明确的选择一个选项。用户操作或者通过程序操作都触发这个信号。
editTextChanged(const QString & text) 当编辑框中的文本改变时发生(editable为true时有效)

QComboBox的核心功能包括:

  • 添加项目:使用addItem()方法添加文本项目,或使用addItem(const QIcon &icon, const QString &text)添加带图标的项目。
  • 设置默认值:通过setCurrentText()setCurrentIndex()设置默认选中项。
  • 获取选中值:使用currentText()currentIndex()获取用户选择

QComboBox基本用法

  • 创建QComboBox对象

    QComboBox *comboBox = new QComboBox(parent);
    
  • QComboBox添加项目

    comboBox->addItem("选项1");
    comboBox->addItem("选项2");
    comboBox->addItem("选项3");
    
  • QComboBox设置默认值(选项)

    comboBox->setCurrentText("选项2"); // 设置默认选中"选项2"
    // 或者
    comboBox->setCurrentIndex(1); // 设置默认选中索引为1的项目
    
  • QComboBox处理用户选择(信号槽连接)

    connect(comboBox, &QComboBox::currentTextChanged, [](const QString &text) {qDebug() << "选中的值为:" << text;
    });
    

QComboBox高级用法

  • QComboBox自适应项目

    // 添加带图标的项目
    comboBox->addItem(QIcon(":/images/icon1.png"), "选项1");
    comboBox->addItem(QIcon(":/images/icon2.png"), "选项2");
    // 设置样式
    comboBox->setStyleSheet(R"(QComboBox {border: 1px solid #ccc;padding: 5px;min-width: 120px;}QComboBox::drop-down {border-left: 1px solid #ccc;}
    )");
    
  • QComboBox动态添加项目

    comboBox->addItem("新选项");
    
  • QComboBox获取所有项目

    for (int i = 0; i < comboBox->count(); ++i) {qDebug() << "项目" << i << ":" << comboBox->itemText(i);
    }
    
  • QComboBox的QSS美化

    基本样式

    QComboBox {background-color: #ffffff;border: 1px solid #ccc;border-radius: 4px;padding: 5px;min-width: 120px;
    }
    

    下拉箭头样式

    QComboBox::drop-down {border-left: 1px solid #ccc;width: 20px;height: 20px;
    }
    QComboBox::down-arrow {image: url(:/images/down_arrow.png);
    }
    

    项目样式

    QComboBox QAbstractItemView {background-color: #ffffff;border: 1px solid #ccc;border-radius: 4px;padding: 5px;
    }
    QComboBox QAbstractItemView::item {padding: 5px;
    }
    QComboBox QAbstractItemView::item:hover {background-color: #f0f0f0;
    }
    QComboBox QAbstractItemView::item:selected {background-color: #e0e0e0;
    }
    

自定义QComboBox示例

以下是一个带复选框的下拉列表控件实现示例:

#ifndef CCHECKCOMBOX_H
#define CCHECKCOMBOX_H#include <QtWidgets/QComboBox>
#include <QtWidgets/QAbstractItemView>class CCheckCombox : public QComboBox {Q_OBJECT
public:explicit CCheckCombox(QWidget* parent = nullptr);void appendItem(const QString& text, bool bChecked);QList<QString> getSelectedItems() const;protected:void mousePressEvent(QMouseEvent* event) override;private:void updateIndexStatus(int index);signals:void checkedStateChange(int index, bool bChecked);
};#endif // CCHECKCOMBOX_H
#include "ccheckcombox.h"
#include <QIcon>
#include <QMouseEvent>
#include <QDebug>CCheckCombox::CCheckCombox(QWidget* parent) : QComboBox(parent) {}void CCheckCombox::appendItem(const QString& text, bool bChecked) {QIcon icon(bChecked ? ":/images/check.png" : ":/images/uncheck.png");addItem(icon, text);setItemData(count() - 1, bChecked, Qt::UserRole);
}void CCheckCombox::updateIndexStatus(int index) {bool bChecked = !itemData(index, Qt::UserRole).toBool();QIcon icon(bChecked ? ":/images/check.png" : ":/images/uncheck.png");setItemIcon(index, icon);setItemData(index, bChecked, Qt::UserRole);emit checkedStateChange(index, bChecked);
}void CCheckCombox::mousePressEvent(QMouseEvent* event) {int x = event->pos().x();int iconWidth = iconSize().width();if (x <= iconWidth) {int index = currentIndex();updateIndexStatus(index);} else {QComboBox::mousePressEvent(event);}
}QList<QString> CCheckCombox::getSelectedItems() const {QList<QString> selectedItems;for (int i = 0; i < count(); ++i) {if (itemData(i, Qt::UserRole).toBool()) {selectedItems.append(itemText(i));}}return selectedItems;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1191100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

突破想象!AI应用架构师用科研AI智能体重塑金融学分析格局

突破想象&#xff01;AI应用架构师用科研AI智能体重塑金融学分析格局 一、引言&#xff1a;金融分析的“旧时代”与“新革命” 1. 一个让分析师崩溃的场景 凌晨3点&#xff0c;某顶级投行的资深分析师李阳还在办公室加班。他面前的电脑屏幕上&#xff0c;开着20多个窗口&#x…

stm32TIM输入捕获基本结构

1. GPIO- 功能&#xff1a;外部信号的“入口”&#xff0c;用来接收外部的脉冲、方波等电信号。2. 滤波器- 功能&#xff1a;给信号“降噪”&#xff0c;过滤掉高频干扰或抖动&#xff0c;保证后续检测的是真实的信号边沿。3. 边沿检测/极性选择- 功能&#xff1a;设置要捕捉的…

计算机大数据毕设实战-基于springboot+大数据技术旅游商品智能推荐管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

【深度解析x-algorithm】XAI-org开源的通用算法引擎核心技术与实践

文章目录前言一、项目背景&#xff1a;AI算法工程化的痛点与解决方案二、x-algorithm核心架构解析1. 基础核心层&#xff08;Core Layer&#xff09;2. 算法组件层&#xff08;Algorithm Component Layer&#xff09;3. 应用适配层&#xff08;Application Adapter Layer&#…

本地Python脚本是否存在命令注入风险

是的&#xff0c;本地Python脚本依然存在严重的命令注入风险&#xff01;核心观点命令注入风险与脚本是否是本地还是Web无关&#xff0c;而与输入来源的可信度有关。 只要脚本使用了不可信的用户输入来构造命令&#xff0c;就存在注入风险。风险来源分析1. 用户输入来源&#x…

收藏!2026年AI浪潮下,Java程序员的出路与三大黄金风口

最近和不少一线开发同行深入交流&#xff0c;发现一个极具普遍性的困惑&#xff1a;技术迭代日新月异&#xff0c;AI浪潮席卷各行各业&#xff0c;多数开发者既对新技术充满期待&#xff0c;又深陷方向迷茫的焦虑。尤其是Java领域的程序员&#xff0c;几乎都在追问同一个问题&a…

关于comfyui的comfyui-prompt-reader-node插件(import failed)和图片信息问题(metadata) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【Eino 】架构与核心特性解析

文章目录前言一、整体架构1. 核心层&#xff08;compose 模块&#xff09;2. 组件层&#xff08;components 模块&#xff09;3. 工具层&#xff08;flow/utils 模块&#xff09;二、核心特性1. 强类型的编排体系2. 灵活的编排能力3. 原生的流处理能力4. 标准化的组件生态5. 工…

α-Conotoxin SI ;Ile-Cys-Cys-Asn-Pro-Ala-Cys-Gly-Pro-Lys-Tyr-Ser-Cys-NH2

一、基础性质英文名称&#xff1a;α-Conotoxin SI&#xff1b;Conotoxin SI (Conus species)中文名称&#xff1a;α- 芋螺毒素 SI&#xff1b;SI 型 α- 芋螺毒素&#xff1b;α3β2 亚型 nAChRs 特异性拮抗肽多肽序列&#xff1a;H-Ile-Cys-Cys-Asn-Pro-Ala-Cys-Gly-Pro-Lys…

VirtualLab Fusion应用:导入材料数据

摘要要对光学系统进行精确建模&#xff0c;必须使用精确的材料特性。 对于薄层或更复杂的材料&#xff0c;实际折射率可能与文献中的数值不同。 因此&#xff0c;需要测量有关材料的复合折射率&#xff0c;并将数据导入 VirtualLab Fusion。 本文件介绍了导入复杂材料数据的工作…

最近搞了个硬核的工业自动化项目,主角是西门子S7-1500 PLC带着一群小弟玩协同作战。这个焊装系统里藏着不少值得说道的门道,咱们边拆边聊

西门子PLC1500大型程序fanuc机器人焊装 包括1台 西门子1500PLC程序&#xff0c;2台触摸屏TP1500程序 9个智能远程终端ET200SP Profinet连接 15个Festo气动智能模块Profinet通讯 10台Fanuc发那科机器人Profinet通讯 3台G120变频器Profinet通讯 2台智能电能管理仪表PAC3200 4个G…

VirtualLab Fusion应用:X射线掠入射聚焦反射镜

摘要掠入射反射光学元件在X射线光路中广泛使用&#xff0c;特别是Kirkpatrick-Baez&#xff08;KB&#xff09;椭圆反射镜系统。&#xff08;A. Verhoeven, et al., Journal of Synchrotron Radiation 27.5 (2020): 1307-1319&#xff09;聚焦是通过使用两个物理分离的椭圆反射…

VirtualLab Fusion应用:导入包含微结构高度数据的位图文件

摘要建模结果与测量数据的比较对于任何光学元件的设计过程都非常重要。因此&#xff0c;有必要将测量到的高度剖面&#xff08;例如微结构的高度剖面&#xff09;导入建模软件&#xff0c;以评估真实元件的性能。因此&#xff0c;在本文档中&#xff0c;我们将展示如何使用位图…

α-Conotoxin EI ;Arg-Asp-Hyp-Cys-Cys-Tyr-His-Pro-Thr-Cys-Asn-Met-Ser-Asn-Pro-Gln-Ile-Cys-NH2

一、基础性质英文名称&#xff1a;α-Conotoxin EI&#xff1b;Conotoxin EI (Conus species)中文名称&#xff1a;α- 芋螺毒素 EI&#xff1b;EI 型 α- 芋螺毒素&#xff1b;α4β2 亚型 nAChRs 特异性拮抗肽多肽序列&#xff1a;H-Arg-Asp-Hyp-Cys-Cys-Tyr-His-Pro-Thr-Cys…

【2026最新】修复工具Directx下载操作使用教程(附官网安装包+图文步骤)

DirectX修复工具是一款专门给 Windows 系统打补丁的小程序&#xff0c;可以把电脑里缺失或损坏的 DirectX 文件重新补全&#xff0c;让游戏、制图、视频软件能正常调用显卡、声卡。DirectX修复工具完全免费&#xff0c;也没有广告&#xff0c;软件只认 Windows&#xff0c;从老…

大数据毕设选题推荐:基于大数据技术旅游商品管理系统基于springboot+大数据技术旅游商品管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

肿瘤坏死因子超家族受体TWEAKR

肿瘤坏死因子受体超家族成员12A&#xff08;TNFRSF12A&#xff09;&#xff0c;又称为成纤维细胞生长因子诱导的早期反应蛋白14&#xff08;FN14&#xff09;&#xff0c;TWEAKR或CD266&#xff0c;是TNFSF12/TWEAK受体。是某些细胞类型的弱凋亡诱导剂。促进血管生成和内皮细胞…

微恢复(微信聊天记录恢复软件)

链接&#xff1a;https://pan.quark.cn/s/477474919484微恢复是一款专业且免费的聊天记录恢复软件&#xff0c;可以将删除聊天记录快速、完整的恢复回来&#xff0c;恢复内容包括图片&#xff0c;视频&#xff0c;语音&#xff0c;文件&#xff0c;无需要越狱&#xff0c;操作简…

重庆同传Gino小翻译认为,同传无非就是听懂发言人讲的话,用听众听得明白的话讲出来,哪有那么多狗屁理论,什么质量,鬼啊,神哦,都是唬人的。

重庆同传Gino小翻译认为&#xff0c;同传无非就是听懂发言人讲的话&#xff0c;用听众听得明白的话讲出来&#xff0c;哪有那么多狗屁理论&#xff0c;什么质量&#xff0c;鬼啊&#xff0c;神哦&#xff0c;都是唬人的。

α-Endorphin (β-Lipotropin (61-76), β-Endorphin (1-16)) ;YGGFMTSEKSQTPLEVT

一、基础性质 英文名称&#xff1a;α-Endorphin&#xff1b;β-Lipotropin (61-76)&#xff1b;β-Endorphin (1-16)中文名称&#xff1a;α- 内啡肽&#xff1b;β- 促脂素 (61-76) 片段&#xff1b;β- 内啡肽 (1-16) 片段多肽序列&#xff1a;H-Tyr-Gly-Gly-Phe-Met-Thr-S…