【QT开发笔记-基础篇】| 第二章 常用控件 | 2.7 组合框 QComboBox_qt组合框_大轮明王讲QT的博客-程序员宅基地

技术标签: c++  《QT开发笔记-基础篇》  qt  linux  物联网  嵌入式硬件  

本节对应的视频讲解:B_站_链_接

https://www.bilibili.com/video/BV11U4y1D7WJ

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


1. 属性和方法


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

1.1 文本

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

// 获取当前条目的索引和文本
int currentIndex() const
QString currentText() 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 &texts)

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

// 一次插入一个条目
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 布局

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


2.2 代码实现

完整的项目,在本节视频的置顶评论下载即可

QStringList gdCityList = {
    "广州市", "深圳市", "珠海市", "东莞市"};
QStringList zjCityList = {
    "杭州市", "宁波市", "温州市", "绍兴市"};
QStringList sdCityList = {
    "济南市", "青岛市", "烟台市", "威海市"};
QStringList hbCityList = {
    "石家庄市", "保定市", "廊坊市", "衡水市"};
QStringList nmCityList = {
    "呼和浩特市", "包头市", "呼伦贝尔市", "赤峰市"};

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(":/icon/apple.ico"));
    ui->cboProvince->setItemIcon(1, QIcon(":/icon/banana.ico"));
    ui->cboProvince->setItemIcon(2, QIcon(":/icon/orange.ico"));
    ui->cboProvince->setItemIcon(3, QIcon(":/icon/peach.ico"));
    ui->cboProvince->setItemIcon(4, QIcon(":/icon/strawberry.ico"));
    // 默认选中第一项-广东省
    ui->cboProvince->setCurrentIndex(0); 

    // 添加城市
    ui->cboCity->addItems(gdCityList);

    // 信号槽
    connect(ui->cboUniversity, SIGNAL(currentIndexChanged(int)), this, SLOT(onCboUniversityChanged(int)));
    connect(ui->cboProvince, SIGNAL(currentIndexChanged(int)), this, SLOT(onCboProvinceChanged(int)));
    connect(ui->cboCity, SIGNAL(currentIndexChanged(int)), this, SLOT(onCboCityChanged(int)));

    // 当文本框内容变化时,更新结果
    connect(ui->leName, &QLineEdit::textChanged, this, &Widget::onLineEditChanged);
}

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

void Widget::onCboUniversityChanged(int index)
{
    
    // 获取姓名、大学、省份、城市
    QString name = ui->leName->text();
    QString university = ui->cboUniversity->currentText();
    QString province = ui->cboProvince->currentText();
    QString city = ui->cboCity->currentText();

    ui->leResult->setText(name + "毕业于" + university + ", 来自" + province + city);
}

void Widget::onCboProvinceChanged(int index)
{
    
    // 先将city对应的列表清空
    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;
    default:
        break;
    }

    // 获取姓名、大学、省份、城市
    QString name = ui->leName->text();
    QString university = ui->cboUniversity->currentText();
    QString province = ui->cboProvince->currentText();
    QString city = ui->cboCity->currentText();

    ui->leResult->setText(name + "毕业于" + university + ", 来自" + province + city);
}

void Widget::onCboCityChanged(int index)
{
    
    // 获取姓名、大学、省份、城市
    QString name = ui->leName->text();
    QString university = ui->cboUniversity->currentText();
    QString province = ui->cboProvince->currentText();
    QString city = ui->cboCity->currentText();

    ui->leResult->setText(name + "毕业于" + university + ", 来自" + province + city);
}

void Widget::onLineEditChanged(QString s)
{
    
    // 获取姓名、大学、省份、城市
    QString name = ui->leName->text();
    QString university = ui->cboUniversity->currentText();
    QString province = ui->cboProvince->currentText();
    QString city = ui->cboCity->currentText();

    ui->leResult->setText(name + "毕业于" + university + ", 来自" + province + city);
}

本节对应的视频讲解:B_站_链_接

https://www.bilibili.com/video/BV11U4y1D7WJ


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bili_mingwang/article/details/126315248

智能推荐

pytorch实现简易分类模型_pytorch简单的分类模型_UQI-LIUWJ的博客-程序员宅基地

1 导入库import torchimport matplotlib.pyplot as pltimport torch.nn.functional as F_pytorch简单的分类模型

Linq技术四:动态Linq技术 -- Linq.Expressions_weixin_30951743的博客-程序员宅基地

前面介绍了Linq的三个方面应用:Linq to SQL, Linq to XML和Linq to Object,这篇介绍一下动态Linq的实现方式及应用场景。命名空间:System.Linq;System.Linq.Expressions;应用Linq的时候,我们都知道仅仅须要Lambda表达式即可,但有些场景仅仅仅仅使用Data Model的字段名操作是不够的或..._fgs.linq.expressions

二叉排序树完整代码_数据结构二叉树排序代码_失恋味道的麻辣小龙虾的博客-程序员宅基地

tree.h(存放函数声明):#pragma once#include<vector>#include<iostream>using namespace std;typedef struct BiTree { //所用的二叉树数据结构 int key; ..._数据结构二叉树排序代码

POJ 3210 Coins (很好的想法题)_synapse7的博客-程序员宅基地

http://poj.org/problem?id=3210这是一道很好的思考题。关键信息:所求的x是对于任意一种初始情况,使所有硬币正面或反面朝上的最少翻转此数,并且注意“only one coin could be flipped each time”,即每次只能翻转一枚硬币。所以:1. 答案要具有普适性,除了n为1时x=0,当n>1时x必为正,但是对于硬币全部朝上的情

Flask:交互的简单实例——模糊搜索_flask mong模糊查询-程序员宅基地

上一节我们成功将flask框架与MySQL数据库进行连接意味着我们现在可以利用两者进行很多的操作了。我最先接触的sql语句是搜索语句,在此我们给自己增加一点难度,实现一个模糊搜索功能。首先为前端模块search.html<!DOCTYPE html><html lang="en"><head> <meta charse..._flask mong模糊查询

【图解+漫话】什么是确认重传机制?两天完全陌生的主机是如何办到『数据的正确交付』的?_两台陌生的主机是如何保证数据正确交付的_帅地的博客-程序员宅基地

小白:你知道吗?数据在传输的时候是分割成一小块一小块传输的,我们把这一小块的数据称之为一个分组。我们在传输这块分组的时候,主要面临两个问题。1、这个分组在传输的过程中,由于在信道传输过程中,收到干扰,导致这个分组到达目的地之后出现了差错,例如分组里面的二进制位1变成了0,0变成了1。2、分组还没传输到目的地,就丢失了,我们也把这种情况称之为丢包。接下来我们先来谈谈第一种情况吧,即分组传..._两台陌生的主机是如何保证数据正确交付的

随便推点

聊聊并发(四)——深入分析ConcurrentHashMap_weixin_33929309的博客-程序员宅基地

线程不安全的HashMap因为多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap,如以下代码 final HashMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;(2);Thread t = new Thread(new Runna...

qml开发笔记(六):可视化元素Text、Window_长沙红胖子Qt的博客-程序员宅基地

qt qml学习笔记(六):可视化元素Text、Window前话 上一章节可视化元素BorderImage、AnimatedImage、AnimatedSprite和SpriteSequence,本章将接着介绍比较常用的Text文本框和Window框。

VC内存泄露检查工具:VisualLeakDetector_vc内存泄露工具_lzg13541043726的博客-程序员宅基地

[转]:http://www.xdowns.com/article/170/Article_3060.html初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题。当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题。内存泄漏是最常见的内存问题之一。内存泄漏如果不是很严重,在短时间内对程序不会_vc内存泄露工具

关于论文目录,一级标题加粗,而后面的.....与页码不加粗的正确设置方法_目录后面的页码不加粗_childerxxx的博客-程序员宅基地

先在正文中修改标题对应的样式,在样式中取消加粗,保存; 选中标题手动加粗; 在目录样式中取消加粗;(引用—>自定义目录—>修改) 重新生成目录。_目录后面的页码不加粗

pytorch多GPU训练保存的模型,在单GPU环境下加载出错_pytorh 多gpu训练的模型 到单gpu加载失败_tang-0203的博客-程序员宅基地

背景在公司用多卡训练模型,得到权值文件后保存,然后回到实验室,没有多卡的环境,用单卡训练,加载模型时出错,因为单卡机器上,没有使用DataParallel来加载模型,所以会出现加载错误。原因DataParallel包装的模型在保存时,权值参数前面会带有module字符,然而自己在单卡环境下,没有用DataParallel包装的模型权值参数不带module。本质上保存的权值文件是一个有序字典。..._pytorh 多gpu训练的模型 到单gpu加载失败

Python数据可视化练习:各种折线图的用法_.itemstyleopts_松鼠爱吃饼干的博客-程序员宅基地

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。以下文章来源于python数据分析之禅 ,作者鸟哥折线图是排列在工作表的列或行中的数据可以绘制到折线图中。折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势。下面我给大家介绍一下如何用pyecharts画出各种折线图1.基本折线图importpyecharts.optionsasoptsfrompy..._.itemstyleopts

推荐文章

热门文章

相关标签