简介
QComboBox是一个集按钮和下拉选项于一体的控件,也被称为下拉列表框。
addItem() 函数添加一个列表项
ui->comboBox->clear(); //清除列表
for (int i=0;i<20;i++)
{
QIcon icon;
icon.addFile(":/image/setting.ico");
ui->comboBox->addItem(icon, QString::asprintf("Item %d",i)); //带图标
// ui->comboBox->addItem(QString::asprintf("Item %d",i)); //不带图标
}
带图标:
不带图标:
addltems() 函数添加多个列表项
ui->comboBox->clear();
QStringList strList;
strList<<"one"<<"two"<<"three"<<"four"<<"five"<<"six";
ui->comboBox->addItems(strList);
QMap配合函数addItem(),给QComboBox添加列表项
QMap<QString, int> City_Zone;
City_Zone.insert("北京",10);
City_Zone.insert("上海",21);
City_Zone.insert("天津",22);
City_Zone.insert("大连",411);
City_Zone.insert("锦州",416);
City_Zone.insert("徐州",516);
City_Zone.insert("福州",591);
City_Zone.insert("青岛",532);
ui->comboBox->clear();
foreach(const QString &str,City_Zone.keys())
ui->comboBox->addItem(str,City_Zone.value(str));
connect(this, SIGNAL(currentIndexChanged), this, SLOT(on_comboBox_currentIndexChanged));
void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1)
{
QString zone=ui->comboBox->currentData().toString() ;//项关联的数据
qDebug() << arg1 + ":区号=" + zone;
}
运行效果如下:
QComboBox常用API
QComboBox 存储的项是一个列表,但是 QComboBox 不提供整个列表用于访问,可以通过索引访问某个项。访问项的一些函数主要有以下几种:
int currentlndex():返回当前项的序号,第一个项的序号为0。
QString currentText():返回当前项的文字。
QVariant currentData(int role = Qt::UserRole):返回当前项的关联数据,数据的缺省角色为 role = Qt::UserRole,角色的意义在后续章节会详细介绍。
QString itemText(int index):返回指定索引号的项的文字。
QVariant itemData(int index, int role = Qt%:UserRole):返回指定索引号的项的关联数据。
int count():返回项的个数。
在一个 QComboBox 组件上选择项发生变化时,会发射如下两个信号:
void currentlndexChanged(int index)
void currentlndexChanged(const QString &text)
这两个信号只是传递的参数不同,一个传递的是当前项的索引号,一个传递的当前项的文字。
其它信号汇总:
QComboBox列表项的访问
例1
ui->comboBox->clear();
QStringList strList;
strList<<"one"<<"two"<<"three"<<"four"<<"five"<<"six";
ui->comboBox->addItems(strList);
connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(on_comboBox2_currentIndexChanged(int)));
void MainWindow::on_comboBox2_currentIndexChanged(int index)
{
qDebug() << index; //输出QComboBox当前选择索引
}
效果如下
例2
QMap<QString, int> City_Zone;
City_Zone.insert("北京",10);
City_Zone.insert("上海",21);
City_Zone.insert("天津",22);
City_Zone.insert("大连",411);
City_Zone.insert("锦州",416);
City_Zone.insert("徐州",516);
City_Zone.insert("福州",591);
City_Zone.insert("青岛",532);
ui->comboBox->clear();
foreach(const QString &str,City_Zone.keys())
ui->comboBox->addItem(str,City_Zone.value(str));
connect(this, SIGNAL(currentIndexChanged), this, SLOT(on_comboBox_currentIndexChanged));
void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1)
{
QString zone=ui->comboBox->currentData().toString() ;//项关联的数据
qDebug() << arg1 + ":区号=" + zone;
}
运行效果如下:
获取当前QComboBox的下标和列表内容
void MainWindow::on_pushButton_5_clicked()
{
qDebug() << ui->comboBox->currentIndex() << ":" << ui->comboBox->currentText();
}
效果如下
0 : "one"
1
1 : "two"
2
2 : "three"