Qt QComboBox组合框控件

文章目录

  • 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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣hot100 路径总和Ⅲ dfs 前缀和 一题双解 超全注释

Problem: 437. 路径总和 III 思路 树的遍历 DFS 一个朴素的做法是搜索以每个节点为根的&#xff08;往下的&#xff09;所有路径&#xff0c;并对路径总和为 targetSumtargetSumtargetSum 的路径进行累加统计。 使用 dfs1 来搜索所有节点&#xff0c;复杂度为 O(n)O(n)O(n)&am…

【计算机网络】TCP原理 | 可靠性机制分析(三)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程、计算机网络的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

数据结构第十二弹---堆的应用

堆的应用 1、堆排序2、TopK问题3、堆的相关习题总结 1、堆排序 要学习堆排序&#xff0c;首先要学习堆的向下调整算法&#xff0c;因为要用堆排序&#xff0c;你首先得建堆&#xff0c;而建堆需要执行多次堆的向下调整算法。 但是&#xff0c;使用向下调整算法需要满足一个前提…

全网最细RocketMQ源码一:NameSrv

一、入口 NameServer的启动源码在NameStartup&#xff0c;现在开始debug之旅 二、createNamesrcController public static NamesrvController createNamesrvController(String[] args) throws IOException, JoranException {System.setProperty(RemotingCommand.REMOTING_VER…

Java中多线程二

抢占调度模型 概述&#xff1a;优先让优先级高的线程使用 CPU &#xff0c;如果线程的优先级相同&#xff0c;那么随机会选择一个&#xff0c;优先级高的线程获取的 CPU 时间片相对多一些 Thread 类中一些关于线程的方法 方法简述public final int getPriority()返回此线程的优…

五、Java中SpringBoot组件集成接入【slf4j日志文档】

五、Java中SpringBoot组件集成接入【slf4j日志文档】 1.slf4j简介2.maven依赖3.配置4.使用5.展示6.参考文章 1.slf4j简介 SLF4J&#xff08;Simple Logging Facade for Java&#xff09;是一个为Java应用程序提供统一日志接口的日志门面框架。它旨在解决Java应用程序中日志系统…

居中面试问题

前端常问居中面试问题 css文本居中 文本水平居中 <div class"father"><div class"child"><div> <div>子类元素为行内元素&#xff0c;则给父类元素定义text-align:center 如果子元素是块元素&#xff0c;则给子元素定义margin&…

Vue3快速入门

文章目录 1. Vue3简介1.1. 【性能的提升】1.2. 源码的升级】1.3. 【拥抱TypeScript】1.4. 【新的特性】 2. 创建Vue3工程2.1. 【基于 vue-cli 创建】2.2. 【基于 vite 创建】(推荐)2.3. 【一个简单的效果】 3. Vue3核心语法3.1. 【OptionsAPI 与 CompositionAPI】Options API 的…

Linux系统——测试端口连通性方法

目录 一、TCP端口连通性测试 1、ssh 2、telnet&#xff08;可能需要安装&#xff09; 3、curl 4、tcping&#xff08;需要安装&#xff09; 5、nc&#xff08;需要安装&#xff09; 6、nmap&#xff08;需要安装&#xff09; 二、UDP端口连通性测试 1、nc&#xff08;…

85.乐理基础-记号篇-速度记号

内容来源于&#xff1a;三分钟音乐社 上一个内容&#xff1a;85.乐理基础-记号篇-力度记号-CSDN博客 速度记号在下方两个里面已经写过一部分了&#xff0c;这些标记总体上是属于 不变速度 的标记&#xff0c;比如一首乐谱就记了 每分钟60拍&#xff0c;那整首速度就都是不变的…

org.springframework.web.servlet.HandlerInterceptor

过期 1 配置黑名单 2 启动注册拦截 3 浏览器访问拦截

【Spring Cloud】Sentinel流量限流和熔断降级的讲解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Spring Cloud》。&#x1f3af;&#x1f3af; &am…

【SAP-PP】生产订单导入问题--完成日期向前推了一天

问题描述&#xff1a; 在执行BAPI_PRODORD_CREATE生产订单导入的时候&#xff0c;发现填写入模板中的基本完成日期是12月31日&#xff0c;但是到具体工单时变成了12月30日 截图说明&#xff1a; 感觉很神奇&#xff0c;咋一看&#xff0c;真的是日期提前了一天&#xff0c;de…

线性回归实例

1、线性回归&#xff08;linear Regression&#xff09;和逻辑回归&#xff08;logistic Regression&#xff09;的区别 线性回归主要是用来拟合数据&#xff0c;逻辑回归主要是用来区分数据&#xff0c;找到决策边界。 线性回归的代价函数常用平方误差函数&#xff0c;逻辑回…

函数指针和回调函数

文章目录 一.函数指针1.什么是函数指针2.函数指针的形式3.函数指针的用途。1.调用函数2.作为参数进行传递 二.函数指针数组三.回调函数 一.函数指针 1.什么是函数指针 函数指针是指向函数的指针。在C语言和C中&#xff0c;函数指针可以用来存储函数的地址&#xff0c;并且可以…

Kotlin程序设计(二)面向对象

Kotlin程序设计中级篇 我们在前面已经学习了Kotlin程序设计的基础篇&#xff0c;本章我们将继续介绍更多Kotlin特性&#xff0c;以及面向对象编程。 函数 其实函数我们在一开始就在使用了&#xff1a; fun main() {println("Hello World") }我们程序的入口点就是…

恒创科技:解决Windows服务器磁盘空间不足的问题

​  服务器硬盘的大小是决定空间是否充足的主要因素。但在日常使用中&#xff0c;服务器和网站备份会消耗大量存储空间&#xff0c;如果维护不当&#xff0c;最终将耗尽您的容量。同样&#xff0c;日志文件、临时文件和数据库可以在硬盘驱动器上或回收站中无休止地建立。当您…

windows10使用Shift+Win+S快捷键来截图

有时候电脑上没有打开微信QQ等软件&#xff0c;但是想使用一下截图&#xff0c;就很麻烦&#xff0c;还好windows10开始已经支持快捷键截图了&#xff1a; 打开截图工具并获取屏幕截图 - Microsoft 支持 快捷键&#xff1a;ShiftWinS 使用教程&#xff1a; 顺带说下系统这个自…

Mingw32编译opencv库

文章目录 1. 准备工作2. 编译cmake构建程序mingw32-make编译 3. 安装4. 安装完的结果 注意&#xff1a; mingw32-make编译的库和MSVC编译的库不兼容&#xff0c;MSVC和mingw-make生成的动态库使用的是不同的ABI&#xff08;Application Binary Interface&#xff09;&#xff0…

货拉拉智能监控实践:如何解决多云架构下的故障应急问题?

一分钟精华速览 在月活超千万的大规模业务背景下&#xff0c;货拉拉遭遇了多云环境下的监控碎片化、规划无序等问题。为了应对这些挑战&#xff0c;货拉拉开发了一站式监控平台——Monitor。该平台的部署有效地实现了对核心应用的监控和报警全覆盖&#xff0c;显著提高了应急响…