简介
QComboBox提供了一种向用户呈现选项列表的方式,以占用最少的屏幕空间。 组合框是一个显示当前项目的选择小部件,可以弹出可选择项目的列表。 组合框可以是可编辑的,允许用户修改列表中的每个项目。 QComboBox 除了显示可见下拉列表外,每个项(item,或称列表项)还可以关联一个 QVariant 类型的变量,用于存储一些不可见数据。
效果
常用Api
添加item
两个重载addItem() 函数,第二个版本可以添加图标,两个函数都有一个可选的 QVariant 类型的参数 userData,可以利用这个变量存储用户定义数据。
void addItem (const QString &text, const QVariant &userData = QVariant())
void addItem (const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
也可以在Ui设计界面添加设置item
访问QComboBox 列表项
int currentlndex():返回当前项的序号,第一个项的序号为0。
QString currentText():返回当前项的文本
QVariant currentData(int role = Qt::UserRole):返回当前项的关联数据
QString itemText(int index) 返回指定索引号的项的文本
QVariant itemData(int index, int role = Qt%:UserRole) 返回指定索引号的项的关联数据。
int count():返回项的个数。
当前项改变信号
在一个 QComboBox 组件上选择项发生变化时,会发射如下信号:
void currentIndexChanged(int index)
void currentIndexChanged(const QString &text)
void currentTextChanged(const QString &text)
注意,前两个信号为重载函数,QT5新版的信号槽语法要使用函数指针语法连接到这个信号,需要使用static_cast转换指针,如下例所示:
connect(ui->comboBox,static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),this,&Widget::onCurrentIndexChanged);
connect(ui->comboBox,static_cast<void (QComboBox::*)(const QString&)>(&QComboBox::currentIndexChanged),this,&Widget::onCurrentStringChanged);
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
.cpp文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//使用QStringList 一次写入多个数据
QStringList strList;
strList<<"jave"<<"c"<<"c#";
ui->comboBox->addItems(strList);
//单独添加
ui->comboBox->addItem("Go");
//单独添加,带图标
static QIcon icon;
icon.addFile("D://QtProject//QComboBox_Example//Qt_Icon.png");
ui->comboBox->addItem(icon,"Qt");
//单独添加,带用户数据项
QString useData = QStringLiteral("Python是一种广泛使用的解释型、高级和通用的编程语言");
ui->comboBox->addItem("Python",useData);
connect(ui->comboBox,static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),this,[&](int index){
QString currentIndex = QString("%1%2").arg(QStringLiteral("当前项索引:")).arg(index);
QString currentUseData = QString("%1%2").arg(QStringLiteral("当前项用户数据:")).arg(ui->comboBox->currentData().toString());
QString currentText = ui->comboBox->currentText();
ui->textEdit->append(currentIndex);
ui->textEdit->append(currentUseData);
ui->textEdit->append(currentText);
});
}
Widget::~Widget()
{
delete ui;
}
ui布局