Qt之QComboBox(添加纯文本item、添加带图标的item、信号、item携带自定义数据、可编辑属性)

您所在的位置:网站首页 combobox添加新列表替代旧列表 Qt之QComboBox(添加纯文本item、添加带图标的item、信号、item携带自定义数据、可编辑属性)

Qt之QComboBox(添加纯文本item、添加带图标的item、信号、item携带自定义数据、可编辑属性)

2023-09-03 13:10| 来源: 网络整理| 查看: 265

QComboBox作为下拉列表框,也是常用的控件之一,最常见的就是win10文件浏览器上的地址输入栏、QQ登录框等。本篇文章将从以下几个方面介绍QComboBox:

[1]添加纯文本item

[2]添加带图标的item

[3]信号

[4]item携带自定义数据

[5]编辑

[1]添加纯文本item

QComboBox添加纯文本列表项可以单个插入(以QString方式)、多个插入(以QStringList方式)、单个指定位置插入、多个指定位置插入,代码如下:

//添加单个item ui->comboBox->addItem("测试项目1"); //批量添加item ui->comboBox->addItems({"测试项目2","测试项目3","测试项目4"}); //指定位置插入单个item(在最后插入) ui->comboBox->insertItem(ui->comboBox->count(),"测试项目5"); //指定位置插入多个item(最前面插入) ui->comboBox->insertItems(0,{"测试项目-1","测试项目0"});

程序运行结果:

 

[2]添加带图标的item

通过调用以下接口可以实现添加带图标的item:

void addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant()) void insertItem(int index, const QIcon &icon, const QString &text, const QVariant &userData = QVariant())

也可以调用以下接口修改或设置已有item的图标:

void setItemIcon(int index, const QIcon &icon)

代码如下:

//设置图标大小为32*32(默认为16*16) ui->comboBox->setIconSize(QSize(32,32)); ui->comboBox->addItem(QIcon(":/new/prefix1/Res/folder.png"),"测试项目6"); ui->comboBox->insertItem(ui->comboBox->count(),QIcon(":/new/prefix1/Res/folder.png"),"测试项目7"); ui->comboBox->setItemIcon(1,QIcon(":/new/prefix1/Res/folder.png"));

程序运行结果:

 

[3]信号

QComboBox有下面这几个信号事件:

void activated(int index) void activated(const QString &text) void currentIndexChanged(int index) void currentIndexChanged(const QString &text) void currentTextChanged(const QString &text) void editTextChanged(const QString &text) void highlighted(int index) void highlighted(const QString &text)

当有列表项被点击时,会发出activated信号,传递index或text参数给信号所对应的槽函数。

当选择项发生变化时,会发出currentIndexChanged信号,传递index或text参数给信号所对应的槽函数。

当列表文本改变时(需要打开可编辑属性),则会触发editTextChanged信号,传递改变后的文本给信号所对应的槽函数。

当某个列表项高亮时(如将鼠标放在列表项上面),会发出highlighted信号,传递index或text参数给信号所对应的槽函数。

下面以void activated(int index)信号作为示例:

信号与槽绑定

connect(ui->comboBox,SIGNAL(activated(int)),this,SLOT(Activated(int)));

槽函数的实现:

void Widget::Activated(int index) { qDebug() itemText(index); }

 

[4]item携带自定义数据

QComboBox可以在添加或插入item时指定自定义数据,也可以根据下标对已有的item进行自定义数据插入,代码如下:

自定义数据:

struct Student { QString name; int age; }; //声明自定义类型,使得Qt能找到此类型的定义 Q_DECLARE_METATYPE(Student);

addItem时直接指定自定义数据:

QVariant useVar; Student s1 = {"小明",20}; useVar.setValue(s1); ui->comboBox->addItem("小明",useVar);

在Activated槽函数中添加以下代码:

QVariant useVar = ui->comboBox->itemData(index); //判断先前是否有指定数据 if(useVar == QVariant::Invalid) { qDebug()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3