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