- Qt中的组合框是集按钮和下拉列表体的控件,,它占用的屏幕空间很小,对应的类是
QComboBox
QComboBox
有很多属性,完整的可查看帮助文档。这里列出常用的属性和方法:
当前组合框中当前项的索引和文本
// 获取当前条目的索引和文本
int currenIndex() const;
QSring currenText() const;
// 获取和设置指定索引条目的文本
QString itemText(int index) const;
void setItemText(int index, const QString &text);
还可以给条目添加图标
// 获取和设置对应索引条目的图标
QIcon itemIcon(int index) const;
void setItemIcon(int index, const QIcon *icon);
向组合框QComboBox
中插入和删除项目,既可以在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 &text);
插入条目:可以一次插入一个条目,也可以一次插入多个条目
// 一次插入一个条目
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);
// 当前选中的条目变化时, 会发射这个两个信号
void currentIndexChanged(int index);
void currentTextChanged(const QString &text);
该案例演示,单选按钮的属性以及信号槽
在Ul设计师界面,拖拽对应的控件,修改显示的文字、控件的name,然后完成布局
// 在Widget.h中
#ifndef WIDGET_H
#define WIDGET_H
#include <QStringList>
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget {
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
void onCboProvinceChanged(int);
void onCboUniversityChanged(int);
void onCboCityChanged(int);
~Widget();
private:
Ui::Widget *ui;
QStringList *gdCityList;
QStringList *zjCityList;
QStringList *sdCityList;
QStringList *hbCityList;
QStringList *nmCityList;
};
#endif // WIDGET_H
// 在Widget.cpp 中
#include "widget.h"
#include "ui_widget.h"
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(":/res/facebook.ico"));
ui->cboProvince->setItemIcon(1, QIcon(":/res/Instagram.ico"));
ui->cboProvince->setItemIcon(2, QIcon(":/res/Messenger.ico"));
ui->cboProvince->setItemIcon(3, QIcon(":/res/Pinterest.ico"));
ui->cboProvince->setItemIcon(4, QIcon(":/res/WhatsApp.ico"));
// 添加城市
gdCityList = new QStringList{"广州市", "深圳市", "珠海市", "东莞市"};
zjCityList = new QStringList{"杭州市", "宁波市", "温州市", "绍兴市"};
sdCityList = new QStringList{"济南市", "青岛市", "烟台市", "威海市"};
hbCityList = new QStringList{"石家庄市", "保定市", "廊坊市", "衡水市"};
nmCityList =
new QStringList{"呼和浩特市区", "包头市", "呼伦贝尔市", "赤峰市"};
ui->cboCity->addItems(*gdCityList);
// 选中省份只显示所在市区实现
connect(ui->cboProvince, &QComboBox::currentIndexChanged, this,
&Widget::onCboProvinceChanged);
// 当城市变化时触发
connect(ui->cboCity, &QComboBox::currentIndexChanged, this,
&Widget::onCboCityChanged);
connect(ui->cboUniversity, &QComboBox::currentIndexChanged, this,
&Widget::onCboUniversityChanged);
connect(ui->leName, &QLineEdit::textChanged, this, [=]() {
QString name = ui->leName->text();
QString university = ui->cboUniversity->currentText();
QString province = ui->cboProvince->currentText();
QString city = ui->cboCity->currentText();
QString s = name + " 毕业于" + university + ", 来自" + province + city;
ui->leResult->setText(s);
});
}
// 当省份变化时触发
void Widget::onCboProvinceChanged(int index) {
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;
}
QString name = ui->leName->text();
QString university = ui->cboUniversity->currentText();
QString province = ui->cboProvince->currentText();
QString city = ui->cboCity->currentText();
QString s = name + " 毕业于" + university + ", 来自" + province + city;
ui->leResult->setText(s);
}
// 当学校变化时触发
void Widget::onCboUniversityChanged(int) {
QString name = ui->leName->text();
QString university = ui->cboUniversity->currentText();
QString province = ui->cboProvince->currentText();
QString city = ui->cboCity->currentText();
QString s = name + " 毕业于" + university + ", 来自" + province + city;
ui->leResult->setText(s);
}
// 当城市变化时触发
void Widget::onCboCityChanged(int) {
QString name = ui->leName->text();
QString university = ui->cboUniversity->currentText();
QString province = ui->cboProvince->currentText();
QString city = ui->cboCity->currentText();
QString s = name + " 毕业于" + university + ", 来自" + province + city;
ui->leResult->setText(s);
}
Widget::~Widget() {
delete ui;
}