需要: #include<QComboBox>
win.h
#ifndef WIN_H
#define WIN_H
#include <QWidget>
#include <QComboBox> //下拉列边框类
#include <QDebug>
class Win : public QWidget
{
Q_OBJECT
public:
Win(QWidget *parent = nullptr);
~Win();
QComboBox* combobox;// 定义下拉列表框指针对象
int i;
QStringList strList;
QString t;
public slots: //槽标记
void slotFunc(int); //选项变化事件currentIndexChanged槽函数
void slotFunc1(QString);
void slotFunc3(int);
void slotFunc4(QString);
};
#endif // WIN_H
win.cpp
#include "win.h"
Win::Win(QWidget *parent)
: QWidget(parent)
{
this->resize(300,300);
combobox = new QComboBox(this); // 创建下拉列表框指针对象
combobox ->setGeometry(10,10,100,30);//设置控件的位置和高宽
combobox->setMaxCount(4); //设置最大存储项目总数
//达到指定项目总数后,不能再添加
combobox->addItem(tr("圆"),1);//添加项目
//参数1 项目-必须是文本
//参数2 用户附加数据-任何类型--可以无
combobox->addItem(QIcon(":/Q/tu/2.png"), "正方形",2);//添加项目--带图标
//参数1:资源路径--资源文件qrc中的资源
//参数2:项目
//参数3:用户附加数据
combobox->addItem(tr("长方形"),3);
combobox->addItem(tr("五角星"),4);
combobox->addItem(tr("棱形"),5);
//说明:由于setMaxCount(4),此项不会加入
i=combobox->maxCount(); //返回最大可存储项目总数
qDebug()<<"最大可存储项目总数:"<<i;
combobox->setMaxVisibleItems(3);//设置下拉框可见的项目总数
i=combobox->maxVisibleItems();//返回可见的项目总数
qDebug()<<"可见的项目总数:"<<i;
combobox->insertSeparator(2);//插入分割线
//参数:分割线的索引
//combobox->clear(); //清空所有项目
i=combobox->count(); //获取项目总数--包括分割线
qDebug()<<"项目总数:"<<i;
combobox->setMaxCount(10);
combobox->setMaxVisibleItems(6);
combobox->insertItem(4,QIcon(":/Q/tu/4.png"),"规则",10);
//参数1:插入位置索引号
//参数2:图标--可以省略
//参数3:项目文本
//参数4:附加数据
strList << "李明" << "中国人" << "教师";
combobox->addItems(strList);//一次性添加多个项
combobox->removeItem(2); //删除指定索引项目
combobox->setFont(QFont("宋体",10));//设置字体
//********选项变化事件currentIndexChanged()
//无论更改是通过编程方式还是通过用户交互完成的,currentIndexChanged()总是被触发
connect(combobox,SIGNAL(currentIndexChanged(int)),this,SLOT(slotFunc(int)));
//参数:传递选项变化后当前的索引号
connect(combobox,SIGNAL(currentIndexChanged(QString)),this,SLOT(slotFunc1(QString)));
//参数:传递选项变化后当前的项目文本
//*************处理激活事件activated()
//如果组合框的当前项发生变化,会发出信号activated(),仅在更改是由用户交互引起的时候才被触发
connect(combobox,SIGNAL(activated(int)),this,SLOT(slotFunc3(int)));
connect(combobox,SIGNAL(activated(QString)),this,SLOT(slotFunc4(QString)));
//currentTextChanged 当前的文本内容发生改变时
//editTextChanged 编辑的文本发生改变时
//highlighted 高亮发生改变时--在下拉列表框中鼠标所选的项目发生变化时
combobox->setItemIcon(0,QIcon(":/Q/tu/1.png")); //给指定索引项目设置图标
combobox->setItemText(2,"矩形"); //给指定索引项目设置文本---原有文本被覆盖
combobox->setCurrentIndex(2);//指定当前项目--默认是第0项目
//参数:索引号
combobox->setCurrentText("李明");//根据文本指定当前项目
//如果参数所指的项目不存在的话就无效
combobox->setEditable(true);//编辑框能否被编辑
//在编辑框中编辑文本回车之后,会追加到项目尾部
bool b=combobox->isEditable();//返回能否被编辑
qDebug()<<"能否被编辑:"<<b;
combobox->setEditText("广东");//设置编辑框中的文本
//只有setEditable设为True,setEditText才有效
//按了回车键 会追加到项目尾部
combobox->setDuplicatesEnabled(true);//是否可重复
//设置为true时,编辑框按回车时追加的项目可以重复
b=combobox->duplicatesEnabled();//返回是否可重复
qDebug()<<"是否可重复:"<<b;
combobox->setFrame(false);//是否有框架--是否有外框
//setEditable 设置为True时 setFrame才有效果
b=combobox->hasFrame();//返回是否有框架
qDebug()<<"是否有框架:"<<b;
combobox->setEditable(false);
combobox->setIconSize(QSize(20,20));//设置图标尺寸
QSize s=combobox->iconSize();//返回图标尺寸
qDebug()<<"图标尺寸:"<<s;
}
Win::~Win()
{
}
void Win::slotFunc(int ii) //选项变化事件currentIndexChanged槽函数
{
qDebug()<<"项目变化了,当前选项索引号:"<<ii;
i = combobox->currentIndex(); // 获取当前项目的索引
qDebug()<<"当前选项索引号="<<i;
t=combobox->currentText(); //取当前项目的文本
qDebug()<<"当前选项文本="<<t;
QVariant v=combobox->currentData(); //获取当前项目的用户附加的数据
//注意返回的数据类型
int n=v.value<int>(); //以int类型返回v中的值
qDebug()<<"当前选项附加的数据="<<n;
v=combobox->itemData(2);//获取指定索引项目的用户附加的数据
//注意返回的数据类型
n=v.value<int>(); //以int类型返回v中的值
qDebug()<<"当前选项附加的数据=="<<n;
t=combobox->itemText(3);//获取指定索引项目的文本
qDebug()<<"指定索引项目的文本=="<<t;
//QString j = typeid(combobox->itemText(3)).name();
//qDebug()<<"j="<<j;
}
void Win::slotFunc1(QString test)
{
qDebug()<<"项目变化了,当前选项项目是:"<<test;
}
void Win::slotFunc3(int ii)
{
qDebug()<<"项目变化了activated,当前选项索引号:"<<ii;
}
void Win::slotFunc4(QString test)
{
qDebug()<<"项目变化了activated,当前选项项目是:"<<test;
}