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_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic: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.hqwc.cn/news/344009.html

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

相关文章

html代码

1、Echart各种图表示例 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>ECharts 箱线图示例</title> <!-- 引入 ECharts 文件 --> <script src"https://cdn.jsdelivr.net/npm/ech…

CRLF漏洞靶场记录

搭建 利用 docker 搭建 vulhub 靶场 git clone https://github.com/vulhub/vulhub.git 进入 /vulhub/nginx/insecure-configuration 目录 启动前关闭现有的 8080、8081、8082 端口服务&#xff0c;避免端口占用 docker-compose up -d 进入容器 docker exec -it insecure-…

Invalid bound statement(只有调用IService接口这一层会报错的)

问题描述:controller直接调用实现类可以,但是一旦调用IService这个接口这一层就报错. 找遍了大家都说是xml没对应好,但是我确实都可以一路往下跳,真的对应好了.结果发现是 MapperScan写错了,如下才是对的. MapperScan的作用是不需要在mapper上一直写注解了,只要启动类上写好就放…

统一格式,无限创意:高效管理不同格式图片批量转换

在数字时代&#xff0c;图片格式的多样性带来了管理上的不便。为了满足不同的需求&#xff0c;我们经常需要将大量图片转换为统一的格式。那么&#xff0c;有没有一种简单、高效的方法来解决这个问题呢&#xff1f;答案是肯定的&#xff01;今天&#xff0c;我们将为您介绍一款…

档案数字化怎样快速整理资料

对于机构和组织来说&#xff0c;档案数字化是一个重要的信息管理和保护措施。要快速整理资料进行档案数字化&#xff0c;可以遵循以下步骤&#xff1a; 1. 准备工具和设备&#xff1a;确保有一台计算机、扫描仪和相关软件。 2. 分类和组织资料&#xff1a;先将资料分类&#xf…

在CentOS中,对静态HTTP服务的性能监控

在CentOS中&#xff0c;对静态HTTP服务的性能监控和日志管理是确保系统稳定运行和及时发现潜在问题的关键。以下是对这一主题的详细探讨。 性能监控 使用工具监控&#xff1a;top、htop、vmstat、iostat等工具可以用来监控CPU、内存、磁盘I/O等关键性能指标。这些工具可以实时…

8.4V升压14V4A芯片

随着手持设备如智能手机、平板电脑等电子设备的普及&#xff0c;对电池充电技术的要求也越来越高。为了满足这一需求&#xff0c;本文将介绍一款8.4V升压14V4A芯片&#xff0c;采用SOP-8 132*476I-OOO1封装&#xff0c;适用于5V-36V输入&#xff0c;外挂MOS&#xff0c;可为主流…

服务器管理平台开发(2)- 设计数据库表

数据库表设计 本篇文章主要对数据管理平台数据库表设计进行介绍&#xff0c;包括单库多表设计、SQL语句、视图构造等 1、整体设计 设备品牌、序列号、型号等使用业务主表进行记录&#xff0c;逻辑磁盘、PCI设备可能出现1对N的情况&#xff0c;分别使用PCI设备表、Mac地址表、逻…

MySQL数据管理(二)

DML语言 DML &#xff08;数据操作语&#xff09;&#xff1a;用于操作数据库对象中所包含的数据 DML包括&#xff1a; INSERT&#xff08;添加数据语句&#xff09;UPDATE&#xff08;更新数据语句&#xff09;DELETE&#xff08;删除数据语句&#xff09; 一、添加数据 …

密码输入检测 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 给定用户密码输入流input,输入流中字符 ‘<’ 表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。 密码安全要求如下: 密码长度&…

生活自来水厂污水处理设备需要哪些

生活自来水厂是确保我们日常用水质量安全的重要设施。在自来水的生产过程中&#xff0c;污水处理设备是不可或缺的环节。那么&#xff0c;生活自来水厂的污水处理设备都有哪些呢&#xff1f;本文将为您详细介绍。 首先&#xff0c;生活自来水厂的污水处理设备主要包括预处理设备…

docker compose安装gitlab

环境 查看GitLab镜像 docker search gitlab 拉取GitLab镜像 docker pull gitlab/gitlab-ce 准备gitlab-docker.yml文件 version: 3.1 services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url…