Qt QComboBox组合框控件

news2025/1/12 7:44:47

文章目录

  • 1 属性和方法
    • 1.1 文本
    • 1.2 图标
    • 1.3 插入和删除
    • 1.4 信号和槽
  • 2 实例
    • 2.1 布局
    • 2.2 代码实现

  • Qt中的组合框是集按钮和下拉列表体的控件,,它占用的屏幕空间很小,对应的类是QComboBox

1 属性和方法

QComboBox有很多属性,完整的可查看帮助文档。这里列出常用的属性和方法:

1.1 文本

当前组合框中当前项的索引和文本

// 获取当前条目的索引和文本
int currenIndex() const;
QSring currenText() const;

// 获取和设置指定索引条目的文本
QString itemText(int index) const;
void setItemText(int index, const QString &text);

1.2 图标

还可以给条目添加图标

// 获取和设置对应索引条目的图标
QIcon itemIcon(int index) const;
void setItemIcon(int index, const QIcon *icon);

1.3 插入和删除

向组合框QComboBox中插入和删除项目,既可以在QT设计师界面中操作,也可以通过代码来实现

  • 通过QT设计师界面

在组合框上右键->【编辑项目…】在打开的编辑窗口中可以增加删除条目

在这里插入图片描述

  • 通过程序

新增条目:可以一次新增一个条目,也可以一次新增多个条目

// 一次新增一个条目
void addItem(const QString &text. const QVariant &userData = QVariant());
void addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant());

// 一次新增多个条目
void addItems(const QStringList &text);

插入条目:可以一次插入一个条目,也可以一次插入多个条目

// 一次插入一个条目
void insertItem(int index, const QString &text, const QVariant &userData = QVariant());
void insertItem(int index, const QIcon &icon, const QString &text, const QVariant &userData = QVariant());

// 一次插入多个条目
void insertItems(int index, const QStringList &list);

插入策略:在插入条目时,还可以指定插入的策略

// 获取和设置插入策略
QComboBox::insertPolicy insertPolicy() const;
void setInsertPolicy(QComboBox::insertPolicy policy);

常用的插入策略有:

  • QComboBox::NoInsert 不插入
  • QComboBox::InsertAtTop 作为第一条条目插入(替换原第一条条目)
  • QComboBox::InsertAtCurrent 替换当前条目
  • QComboBox::InsertAtBottom 在最后一个条目之后插入
  • QComboBox::InsertAfterCurrent 在当前条目之后插入
  • QComboBox::InsertBeforeCurrent 当前条目之前插入
  • QComboBox::InsertAlphabetically 英文字母顺序插入

插入分隔符:用于在条目之间插入一条分隔符

// 在指定索引位置处插入分隔符
void insertSeparator(int index);

删除条目:删除指定索引位置的条目

// 删除指定索引的条目
void removeItem(int index);

1.4 信号和槽

// 当前选中的条目变化时, 会发射这个两个信号
void currentIndexChanged(int index);
void currentTextChanged(const QString &text);

2 实例

该案例演示,单选按钮的属性以及信号槽

在这里插入图片描述

2.1 布局

在Ul设计师界面,拖拽对应的控件,修改显示的文字、控件的name,然后完成布局

在这里插入图片描述

2.2 代码实现

// 在Widget.h中
#ifndef WIDGET_H
#define WIDGET_H

#include <QStringList>
#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget {
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    void onCboProvinceChanged(int);
    void onCboUniversityChanged(int);
    void onCboCityChanged(int);
    ~Widget();

private:
    Ui::Widget *ui;
    QStringList *gdCityList;
    QStringList *zjCityList;
    QStringList *sdCityList;
    QStringList *hbCityList;
    QStringList *nmCityList;
};
#endif  // WIDGET_H



// 在Widget.cpp 中
#include "widget.h"

#include "ui_widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
    ui->setupUi(this);

    // 添加省份
    ui->cboProvince->addItem("广东省");
    ui->cboProvince->addItem("浙江省");
    ui->cboProvince->addItem("山东省");
    ui->cboProvince->addItem("河北省");
    ui->cboProvince->addItem("内蒙古自治区");

    // 添加图标
    ui->cboProvince->setItemIcon(0, QIcon(":/res/facebook.ico"));
    ui->cboProvince->setItemIcon(1, QIcon(":/res/Instagram.ico"));
    ui->cboProvince->setItemIcon(2, QIcon(":/res/Messenger.ico"));
    ui->cboProvince->setItemIcon(3, QIcon(":/res/Pinterest.ico"));
    ui->cboProvince->setItemIcon(4, QIcon(":/res/WhatsApp.ico"));

    // 添加城市
    gdCityList = new QStringList{"广州市", "深圳市", "珠海市", "东莞市"};
    zjCityList = new QStringList{"杭州市", "宁波市", "温州市", "绍兴市"};
    sdCityList = new QStringList{"济南市", "青岛市", "烟台市", "威海市"};
    hbCityList = new QStringList{"石家庄市", "保定市", "廊坊市", "衡水市"};
    nmCityList =
        new QStringList{"呼和浩特市区", "包头市", "呼伦贝尔市", "赤峰市"};
    ui->cboCity->addItems(*gdCityList);

    // 选中省份只显示所在市区实现
    connect(ui->cboProvince, &QComboBox::currentIndexChanged, this,
            &Widget::onCboProvinceChanged);

    // 当城市变化时触发
    connect(ui->cboCity, &QComboBox::currentIndexChanged, this,
            &Widget::onCboCityChanged);

    connect(ui->cboUniversity, &QComboBox::currentIndexChanged, this,
            &Widget::onCboUniversityChanged);

    connect(ui->leName, &QLineEdit::textChanged, this, [=]() {
        QString name = ui->leName->text();
        QString university = ui->cboUniversity->currentText();
        QString province = ui->cboProvince->currentText();
        QString city = ui->cboCity->currentText();
        QString s = name + " 毕业于" + university + ", 来自" + province + city;
        ui->leResult->setText(s);
    });
}

// 当省份变化时触发
void Widget::onCboProvinceChanged(int index) {
    ui->cboCity->clear();
    switch (index) {
        case 0:
            ui->cboCity->addItems(*gdCityList);
            break;
        case 1:
            ui->cboCity->addItems(*zjCityList);
            break;
        case 2:
            ui->cboCity->addItems(*sdCityList);
            break;
        case 3:
            ui->cboCity->addItems(*hbCityList);
            break;
        case 4:
            ui->cboCity->addItems(*nmCityList);
            break;
    }
    QString name = ui->leName->text();
    QString university = ui->cboUniversity->currentText();
    QString province = ui->cboProvince->currentText();
    QString city = ui->cboCity->currentText();
    QString s = name + " 毕业于" + university + ", 来自" + province + city;
    ui->leResult->setText(s);
}

// 当学校变化时触发
void Widget::onCboUniversityChanged(int) {
    QString name = ui->leName->text();
    QString university = ui->cboUniversity->currentText();
    QString province = ui->cboProvince->currentText();
    QString city = ui->cboCity->currentText();
    QString s = name + " 毕业于" + university + ", 来自" + province + city;
    ui->leResult->setText(s);
}

// 当城市变化时触发
void Widget::onCboCityChanged(int) {
    QString name = ui->leName->text();
    QString university = ui->cboUniversity->currentText();
    QString province = ui->cboProvince->currentText();
    QString city = ui->cboCity->currentText();
    QString s = name + " 毕业于" + university + ", 来自" + province + city;
    ui->leResult->setText(s);
}

Widget::~Widget() {
    delete ui;
}

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

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

相关文章

【福利】百度内容审核平台实战

文章目录 前言功能概述产品价格快速入门&#xff08;账号登录及资源领取、在线验证、编写示例程序&#xff09;实战演示1、首先创建一个应用2、引入百度的SDK3、测试用例百度内容审核-文本 200QPS百度内容审核-图像 50QPS 写在最后 前言 百度内容审核平台主要针对图像、文本、…

RT-Thread 中断管理

中断管理 什么是中断&#xff1f;简单的解释就是系统正在处理某一个正常事件&#xff0c;忽然被另一个需要马上处理的紧急事件打断&#xff0c;系统转而处理这个紧急事件&#xff0c;待处理完毕&#xff0c;再恢复运行刚才被打断的事件。 生活中&#xff0c;我们经常会遇到这…

开源C语言库Melon:数据恢复算法

本文讲述开源C语言库Melon中的里德所罗门纠错码的使用。 关于 Melon 库&#xff0c;这是一个开源的 C 语言库&#xff0c;它具有&#xff1a;开箱即用、无第三方依赖、安装部署简单、中英文文档齐全等优势。 Github repo 简介 里德所罗门编码是一种纠错码技术&#xff0c;…

C++ λ表达式

λ表达式提供了函数对象的另一种编程机制。 在 C 11 和更高版本中&#xff0c;Lambda 表达式&#xff08;通常称为 Lambda&#xff09;是一种在被调用的位置或作为参数传递给函数的位置定义匿名函数对象&#xff08;闭包&#xff09;的简便方法。 Lambda 通常用于封装传递给算法…

项目与工程的关系,是一个项目包含若干个工程还是一个工程包含若干个项目?

在项目管理和工程管理的领域里&#xff0c;项目&#xff08;Project&#xff09;和工程&#xff08;Engineering&#xff09;通常有不同的定义和关系&#xff0c;这取决于具体的行业和应用背景。但一般来说&#xff0c;项目和工程之间的关系可以这样理解&#xff1a; 项目包含工…

CMake入门教程【高级篇】管理MSVC编译器警告

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 1.什么是MSVC?2.常用的屏蔽警告3.MSVC所有警告4.target_compile_options用法5.如何在CMake中消除MSVC的警告?6.屏蔽警告编写技巧

docker一键安装

1.把docker_compose_install文件夹放在任意路径&#xff1b; 2.chmod -R 777 install.sh 3.执行./install.sh 兼容&#xff1a;CentOS7.6、麒麟V10服务器版、统信UOS等操作系统。 下载地址&#xff08;本人上传&#xff0c;免积分下载&#xff09;&#xff1a;https://downlo…

PPT模板,免费下载

找PPT模板、素材&#xff0c;就上这几个网站&#xff0c;免费下载。 1、菜鸟图库 https://www.sucai999.com/search/ppt/0_0_0_1.html?vNTYxMjky 菜鸟图库素材非常齐全&#xff0c;设计、办公、图片、视频等素材这里都能找到&#xff0c;PPT模板数量很可观&#xff0c;模板样…

每日一题——LeetCode1154.一年中的第几天

方法一 列举法&#xff1a; 用一个数组把每个月份的天数都列举出来 判断闰年&#xff0c;是闰年2月份有29天 循环对当前月份之前的月份天数求和 加上当天月份的天数 var dayOfYear function(date) {let year date.slice(0, 4);let month date.slice(5, 7);let day dat…

SpringBoot用MultipartFile.transferTo传递相对路径的问题

问题描述&#xff1a; 打算给自己的项目添加一个上传文件保存功能&#xff0c;于是我使用MultipartFile.transferTo()来完成这个功能&#xff0c;由于我的项目要部署到服务器&#xff0c;所以我使用了相对路径把上传的文件保存到当前项目的工作目录下&#xff0c;但是报错了&am…

基于SpringBoot的教学管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

黑马程序员——2022版软件测试——乞丐版——day01

目录&#xff1a; 测试介绍 什么是软件测试&#xff1f;测试主流技能主流方向建议测试常用分类 分类阶段划分代码可见度划分总结模型 角度质量模型测试流程 需求分析&#xff08;评审&#xff09;测试计划用例设计用例执行缺陷管理测试报告测试用例 用例的作用用例模板八大要素…

Camunda Spin

Spin 常用于在脚本中解析json或者xml使用&#xff0c;S(variable) 表示构造成Spin对象&#xff0c;通过prop(“属性名”)获取属性值&#xff0c;通过stringValue()、numberValue()、boolValue() 等对类型转换。 repositoryService.createDeployment().name("消息事件流程&…

Fluids —— Fluid-object collisions

对移动碰撞体的精确速度&#xff0c;通常对模拟是非常重要的&#xff0c;尤其是FLIP&#xff1b;不正常的碰撞速度&#xff0c;可能会缺乏动态的飞溅或泄漏&#xff1b; SOP流体通过FLIP Collide SOP节点来处理碰撞和交互&#xff1b;碰撞对象可以是静态达到&#xff0c;移动的…

Druid 分析jpa批量插入

Druid是阿里巴巴开发的号称为监控而生的数据库连接池&#xff0c;在功能、性能、扩展性方面&#xff0c;都超过其他数据库连接池&#xff0c;包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等&#xff0c;秒杀一切。 Druid 可以很好的监控 DB 池连接和 SQL 的执行情况&am…

浅析NVMe key per IO加密技术-1

一、Key per IO功能介绍 在当前的数据中心环境中&#xff0c;数据加密通常采用存储设备内部生成和管理的加密密钥与加密数据紧密耦合的方式进行。TCG Opal定义了一套针对自加密硬盘&#xff08;SED, Self-Encrypting Drives&#xff09;的标准化安全子系统类&#xff08;SSC, …

Go语言学习笔记(三)

教程&#xff1a;文档 - Go 编程语言 (studygolang.com) 调用模块代码 在call-module-code需要注意&#xff0c;需要在hello目录下操作 go mod edit -replace example.com/greetings../greetings 这是一个在Go项目的模块管理中的命令。在Go的模块管理工具&#xff08;go mod&…

K8s Pod详解

1.Pod结构 每个Pod中都可以包含一个或者多个容器&#xff0c;这些容器可以分为两类&#xff1a; 用户程序所在的容器&#xff0c;数量可多可少 Pause容器&#xff0c;这是每个Pod都会有的一个根容器&#xff0c;它的作用有两个&#xff1a; 可以以它为依据&#xff0c;评估整个…

基于java的SSM框架实现在线投稿网站系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现在线投稿网站系统演示 摘要 随着计算机技术的飞速发展&#xff0c;稿件也已进入信息化时代。为了使稿件管理更高效、更科学&#xff0c;决定开发投稿审稿系统。 本文采用自顶向下的结构化的系统分析方法&#xff0c;阐述了一个功能全面的投稿审稿系统…

【HarmonyOS4.0】第七篇-ArkUI系统组件(二)

鸿蒙开发系统组件详细剖析 五、进度条组件 进度条也是UI开发最常用的组件之一&#xff0c;ArkUI开发框架提供了两种类型的进度条&#xff1a; Progress 和LoadingProgress &#xff0c;前者可以精准指定进度&#xff0c;后者表示正在加载的状态&#xff0c;我们接下来对它们分…