Bootstrap

QComboBox使用讲解

简介

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布局
在这里插入图片描述

;