QComboBox 是下拉列表框组件类,它提供一个下拉列表供用户选择,也可以直接当作一个 QLineEdit 用作输入。QComboBox 除了显示可见下拉列表外,每个项(item,或称列表项)还可以关联一个 QVariant 类型的变量,用于存储一些不可见数据。如图所示的就是一个combox:
使用方法:
1——添加下拉列表选项
//方式一ui->comboBox->addItem("a");ui->comboBox->addItem("b");ui->comboBox->addItem("c");ui->comboBox->addItem("d");
//方式二QStringList strList;strList<<"a"<<"b"<<"c"<<"d";ui->comboBox->addItems(strList);
效果如下:
1-1——添加带图标的下拉选项
//方式一ui->comboBox->setIconSize(QSize(32,32));ui->comboBox->addItem(QIcon("C:/Users/richard/Desktop/demo1/demo1/123.jpg"),"123");
效果如下:
方式二:void setItemIcon(int index, const QIcon &icon)
ui->comboBox->addItem("a");ui->comboBox->addItem("b");ui->comboBox->addItem("c");ui->comboBox->addItem("d");ui->comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);QIcon icon("C:/Users/richard/Desktop/demo1/demo1/123.jpg");ui->comboBox->setIconSize(QSize(32,32));ui->comboBox->setItemIcon(1,icon);
补充:添加具有用户数据的项QComboBox::addltem()函数的两种参数的原型定义如下:
void addItem (const QString &text, const QVariant &userData = QVariant())void addItem (const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
不管是哪一个 addItem() 函数,后面都有一个可选的 QVariant 类型的参数 userData,可以利用这个变量存储用户定义数据
2——item携带自定义数据
QVariant currentData(int role =Qt::UserRole):返回当前项的关联数据,数据的缺省角色为 role = Qt::UserRole。注:关于setRole存储数据的示例可以看这里QString itemText(int index):返回指定索引号的项的文字。QVariant itemData(int index, int role = Qt%:UserRole):返回指定索引号的项的关联数据。
struct Student{QString name;int age;};//声明自定义类型,使得Qt能找到此类型的定义Q_DECLARE_METATYPE(Student);
使用时:
QVariant useVar;Student s1 = {"小明",20};useVar.setValue(s1);ui->comboBox->addItem("小明",useVar);//槽函数QVariant useVar = ui->comboBox->itemData(index);//判断先前是否有指定数据if(useVar == QVariant::Invalid){return;}qDebug() << useVar.value<Student>().name << ":" << useVar.value<Student>().age;
3——常见函数设置
//1 默认设置处于下标几的选项ui->comboBox->setCurrentIndex(2);//2 获得combox控件总索引数int iSum = ui->comboBox->count();//3 获取当前下标索引号int index = ui->comboBox->currentIndex();//4 获取当前文本内容ui->comboBox->currentText()//清楚列表ui->comboBox->clear()//打开可编辑属性ui->comboBox->setEditable(true);//设置当前显示的内容,记得结合可编辑属性一起使用ui->comboBox->setCurrentText(QString);
注:在打开可编辑属性后,同样可以通过setValidator接口限定其输入格式,通过setCompleter接口设置输入自动补全。
在这里需要说明的是,默认情况下,QComboBox的编辑模式并不会删除或改变已有的item,而是在用户按下回车后,在最顶端或下方添加刚刚编辑的内容。如果想要改变默认属性,可以通过setInsertPolicy接口进行修改。
4——信号
//当有列表项被点击时,会发出activated信号,传递index或text参数给信号所对应的槽函数。void activated(int index)void activated(const QString &text)//当选择项发生变化时,会发出currentIndexChanged信号,传递index或text参数给信号所对应的槽函数。void currentIndexChanged(int index)void currentIndexChanged(const QString &text)void currentTextChanged(const QString &text)//当列表文本改变时(需要打开可编辑属性),则会触发editTextChanged信号,传递改变后的文本给信号所对应的槽函数。void editTextChanged(const QString &text)//当某个列表项高亮时(如将鼠标放在列表项上面),会发出highlighted信号,传递index或text参数给信号所对应的槽函数。void highlighted(int index)void highlighted(const QString &text)
举例:信号与槽的绑定
connect(ui->comboBox,SIGNAL(activated(int)),this,SLOT(slotActivated(int)));
5——输入后捕捉enter键
这里用到了事件过滤器
virtual bool eventFilter(QObject * obj,QEvent *event);
记得给要捕捉的控件安装事件过滤器
m_combox->installEventFilter(this);
Key_Enter是小键盘的确认键,Key_Return是大键盘的回车键。
bool ComplexCombox::eventFilter(QObject *obj, QEvent *event){if (obj == m_combox){if (event->type() == QEvent::KeyPress){QKeyEvent *ke = static_cast<QKeyEvent*>(event);if (ke->key() == Qt::Key_Enter || ke->key() == Qt::Key_Return){emit sigComboxEditFinshed(m_combox->currentText(),m_index);return true; //该事件已经被处理}return false;}else{return false; //如果是其他事件可以进一步处理}}else{return ComplexCombox::eventFilter(obj, event);//将事件交给上层对话框}}
6——QCombox输入编辑框加输入限制
方式一:
m_lineEdit = new QLineEdit(this);m_lineEdit->setAttribute(Qt::WA_InputMethodEnabled, false);//屏蔽输入框的输入法m_lineEdit->setMaxLength(4);QRegExp rx("^([A-Da-d]{1}([1-4]{1}[0-9]{2}|[5]{1}[1]{1}[0-2]{1}|[5]{1}[0]{1}[0-9]{1}|[1-9]{1}[0-9]{1}|[1-9]{1}))$");QRegExpValidator *latitude = new QRegExpValidator(rx,m_lineEdit);m_lineEdit->setValidator(latitude);m_combox->setLineEdit(m_lineEdit);
方式二:
QRegExp rx("^([A-Da-d]{1}([1-4]{1}[0-9]{2}|[5]{1}[1]{1}[0-2]{1}|[5]{1}[0]{1}[0-9]{1}|[1-9]{1}[0-9]{1}|[1-9]{1}))$");QRegExpValidator *latitude = new QRegExpValidator(rx,m_combox->lineEdit());m_combox->lineEdit()->setValidator(latitude);
记得combox的可编辑属性要打开
QCombox(重写)+QCompleter(自动补全,自动加载qcombox的下拉选项,设置背景颜色)
qt 正则表达式
如果觉得《QT combox的使用示例(输入后捕捉enter键 以及输入编辑框如何加输入限制(正则表达式))》对你有帮助,请点赞、收藏,并留下你的观点哦!