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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

彭小宴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值