本节对应的视频讲解: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