QT学习笔记6 组合框QComboBox使用方法和案例

介绍

QComboBox控件,是集按钮和下拉列表与一体的控件,应用非常广泛
在这里插入图片描述

使用方法

文本

组合框具有的信息不仅仅只有文本,还有索引

// 获取当前条目的索引和文本
int currentIndex() const
QString currentText() const

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

代码例程:

String city = ui->cBoxCity->currentText();//获取当前文本
int index = ui->cBoxCity->currentIndex();//获取当前文本的索引值

图标

不仅仅可以给组合框的各个条目添加文本信息,还可以为各个条目添加图标,使其更加美观,如图所示:
在这里插入图片描述

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

代码例程:

 // 为省份条目添加图标
    ui->cBoxProvince->setItemIcon(0, QIcon(":/icon/苹果.png"));
    ui->cBoxProvince->setItemIcon(1, QIcon(":/icon/香蕉.png"));
    ui->cBoxProvince->setItemIcon(2, QIcon(":/icon/橘子.png"));
    ui->cBoxProvince->setItemIcon(3, QIcon(":/icon/梨子.png"));
    ui->cBoxProvince->setItemIcon(4, QIcon(":/icon/桃子.png"));

插入和删除

可以通过代码或者通过QT设计界面两种方式修改控件属性的方式为QComboBox插入或者删除条目

  • 通过设计界面

在这里插入图片描述

  • 通过代码
    新增条目,可以一次新增一个条目,也可以一次新增多个条目
// 一次新增一个条目
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)

代码例程:

QStringList gdCityList = {"广州市", "深圳市", "珠海市", "东莞市"};


//添加省份,单条目添加
    ui->cBoxProvince->addItem("广东省");
    ui->cBoxProvince->addItem("浙江省");
    
    ui->cBoxCity->addItems(gdCityList);

插入条目*

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

代码例程:

    ui->cBoxProvince->insertItem(0,"云南省");

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

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

常用插入策略:

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

删除条目

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

代码例程:

    ui->cBoxProvince->removeItem(0);

相关函数,可供参考:

void setItemText(int index, const QString &text); // 设置item的文本
void setItemIcon(int index, const QIcon &icon); // 设置item的图标
void setIconSize(const QSize &size); // 设置item的图标尺寸
// 设置item的用户数据
void setItemData(int index, const QVariant &value, int role = Qt::UserRole);
void setMaxCount(int max); // 设置item的允许最大数量

QString itemText(int index) const; // 获取item的文本
QIcon itemIcon(int index) const; // 获取item的图标
QSize iconSize() const; // 获取item的图标尺寸
QVariant itemData(int index, int role = Qt::UserRole) const; // 获取item的用户数据
int count() const; // 获取item的数量
int maxCount() const; // 获取item的允许最大数量

信号槽、

组合框发生条目变化时,就会发出相应的信号,使用方法不过多介绍,和按钮的槽函数使用方法一样

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

UI界面

在这里插入图片描述

按钮我添加了图标,更加美观。添加方法网上有很多,大家可以自行寻找

案例

代码:

#include "widget.h"
#include "ui_widget.h"

#include <QComboBox>
#include <QDebug>

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

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

    //添加省份,单条目添加
    ui->cBoxProvince->addItem("广东省");
    ui->cBoxProvince->addItem("浙江省");
    ui->cBoxProvince->addItem("山东省");
    ui->cBoxProvince->addItem("河北省");
    ui->cBoxProvince->addItem("内蒙古");

    // 为省份条目添加图标
    ui->cBoxProvince->setItemIcon(0, QIcon(":/icon/苹果.png"));
    ui->cBoxProvince->setItemIcon(1, QIcon(":/icon/香蕉.png"));
    ui->cBoxProvince->setItemIcon(2, QIcon(":/icon/橘子.png"));
    ui->cBoxProvince->setItemIcon(3, QIcon(":/icon/梨子.png"));
    ui->cBoxProvince->setItemIcon(4, QIcon(":/icon/桃子.png"));

    //默认选中第一项
    ui->cBoxProvince->setCurrentIndex(0);

    ui->cBoxCity->addItems(gdCityList);
    ui->comboBox->addItems(school);

}

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





void Widget::on_comboBox_currentIndexChanged(int index)
{
    qDebug("school change");
    QString name = ui->lineEdit_name->text();
    QString school = ui->comboBox->currentText();
    QString Province = ui->cBoxProvince->currentText();
    QString city = ui->cBoxCity->currentText();

    ui->lineEdit_result->setText(name + "毕业于" + school + ",来自" + Province + city);
}

void Widget::on_cBoxProvince_currentIndexChanged(int index)
{

    ui->cBoxCity->clear();
    switch(index)
    {
    case 0:
         ui->cBoxCity->addItems(gdCityList);
        break;
    case 1:
        ui->cBoxCity->addItems(zjCityList);
        break;
    case 2:
        ui->cBoxCity->addItems(sdCityList);
        break;
    case 3:
         ui->cBoxCity->addItems(hbCityList);
        break;
    case 4:
        ui->cBoxCity->addItems(nmCityList);
        break;
    }
    QString name = ui->lineEdit_name->text();
    QString school = ui->comboBox->currentText();
    QString Province = ui->cBoxProvince->currentText();
    QString city = ui->cBoxCity->currentText();

    ui->lineEdit_result->setText(name + "毕业于" + school + ",来自" + Province + city);
}

void Widget::on_cBoxCity_currentIndexChanged(int index)
{
    QString name = ui->lineEdit_name->text();
    QString school = ui->comboBox->currentText();
    QString Province = ui->cBoxProvince->currentText();
    QString city = ui->cBoxCity->currentText();

    ui->lineEdit_result->setText(name + "毕业于" + school + ",来自" + Province + city);
}

void Widget::on_lineEdit_name_textChanged(const QString &arg1)
{
    QString name = ui->lineEdit_name->text();
    QString school = ui->comboBox->currentText();
    QString Province = ui->cBoxProvince->currentText();
    QString city = ui->cBoxCity->currentText();

    ui->lineEdit_result->setText(name + "毕业于" + school + ",来自" + Province + city);
}
//插入条目
void Widget::on_btn_InsertItem_clicked()
{
    ui->cBoxProvince->insertItem(0,"云南省");
}
//删除条目
void Widget::on_btn_RemoveItem_clicked()
{
    ui->cBoxProvince->removeItem(0);
}

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Qt中,组合QComboBox是一个常用的控件,用于展示可选项列表供用户选择。默认情况下,QComboBox的样式很简单,只有一个下拉箭头和当前选项的文本。但是,在某些情况下,我们可能需要对QComboBox进行一些定制,以适应特定的需求。 本文将介绍如何使用Qt Style Sheet对QComboBox进行定制。具体来说,我们会实现以下效果: 1. 修改QComboBox的背景色和边框样式 2. 修改下拉箭头的颜色和大小 3. 修改QComboBox弹出菜单中的选项样式 首先,我们需要创建一个QComboBox对象,并设置一些基本属性,如下所示: ```python # 创建QComboBox对象 cmb = QtWidgets.QComboBox() # 设置组合框宽度和高度 cmb.setFixedWidth(200) cmb.setFixedHeight(30) # 添加选项 cmb.addItem("Option 1") cmb.addItem("Option 2") cmb.addItem("Option 3") # 设置默认选项 cmb.setCurrentIndex(0) ``` 接下来,我们可以开始对QComboBox进行样式定制。首先,我们需要修改其背景色和边框样式。可以使用如下代码: ```python cmb.setStyleSheet(''' QComboBox { background-color: #F0F0F0; border: 2px solid #CCCCCC; border-radius: 5px; padding: 5px; } ''') ``` 这段代码使用Qt Style Sheet的基本语法,将QComboBox的背景色设置为#F0F0F0,边框样式设置为2像素的实线边框,圆角半径设置为5像素,内边距设置为5像素。 接下来,我们需要修改下拉箭头的颜色和大小。可以使用如下代码: ```python cmb.setStyleSheet(''' QComboBox { background-color: #F0F0F0; border: 2px solid #CCCCCC; border-radius: 5px; padding: 5px; } QComboBox::down-arrow { image: url("down-arrow.png"); width: 16px; height: 16px; } ''') ``` 这段代码使用QComboBox的伪状态选择器(down-arrow)来修改下拉箭头的样式。我们将下拉箭头的图片设置为down-arrow.png,并将其宽度和高度设置为16像素。 最后,我们需要修改弹出菜单中的选项样式。可以使用如下代码: ```python cmb.setStyleSheet(''' QComboBox { background-color: #F0F0F0; border: 2px solid #CCCCCC; border-radius: 5px; padding: 5px; } QComboBox::down-arrow { image: url("down-arrow.png"); width: 16px; height: 16px; } QComboBox::item { background-color: #FFFFFF; color: #333333; padding: 5px; } QComboBox::item:selected { background-color: #3399FF; color: #FFFFFF; } ''') ``` 这段代码使用QComboBox的伪状态选择器(item)来修改弹出菜单中的选项样式。我们将选项的背景色设置为#FFFFFF,字体颜色设置为#333333,内边距设置为5像素。当选项被选中时,背景色设置为#3399FF,字体颜色设置为#FFFFFF。 以上就是使用Qt Style Sheet对QComboBox进行定制的方法。通过简单的样式定制,我们可以使QComboBox更好地适应特定的需求,提高用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭小宴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值