当前位置:网站首页>QCombox(重写)+QCompleter(自动补全,自动加载qcombox的下拉选项,设置背景颜色)
QCombox(重写)+QCompleter(自动补全,自动加载qcombox的下拉选项,设置背景颜色)
2022-07-05 23:12:00 【Licht小粉】
示例:
#ifndef ComplexCombox_H
#define ComplexCombox_H
#include <QObject>
#include <QLineEdit>
#include <QEvent>
#include <QKeyEvent>
#include <QWidget>
#include <QDebug>
#include <QTimer>
#include <QComboBox>
#include <QCompleter>
#include <QStringListModel>
#include <QHeaderView>
#include <QLinearGradient>
#include "lightgroupbutton.h"
#include "data/jsondatamanager.h"
#define COMMOM_ADDR_COLOR "#D3D3D3"
#define USED_ADDR_COLOR "#EEEE00"
class ComplexCombox : public QComboBox
{
Q_OBJECT
public:
explicit ComplexCombox(QWidget *parent = 0);
~ComplexCombox();
protected:
//动态加载的话就要重写这个下拉的函数
void showPopup()override;
private:
void initCtr();
void initData();
private:
QComboBox *m_combox;
QCompleter *m_completer;
QList<int> m_qlAddr;
int m_iComboxIndex;
int m_iSelectBtnIndex;
};
#endif // ComplexCombox_H
#include "complexcombox.h"
ComplexCombox::ComplexCombox(QWidget *parent) :
QComboBox(parent)
{
initCtr();
}
ComplexCombox::~ComplexCombox()
{
}
void ComplexCombox::initCtr()
{
m_iComboxIndex=0;
m_iSelectBtnIndex=0;
initData();
setInsertPolicy(QComboBox::InsertAtCurrent);
//setFixedSize(50,20);
setCurrentIndex(0);
setEditable(true);
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,this->lineEdit());
this->lineEdit()->setValidator(latitude);
this->lineEdit()->setCompleter(m_completer);//筛选器要安装在lineEdit里面,不然不会生效
connect(lineEdit(),SIGNAL(editingFinished()),this,SLOT(slotCboxEditFinished()));
connect(this,SIGNAL(activated(QString)),this,SLOT(slotCboxActived(QString)));
}
void ComplexCombox::initData()
{
QStringList slAddr;
for(int i=0;i<2048;i++)
{
m_qlAddr.append(i);
slAddr << playAddrCovertToSaveAddr(i);
}
m_completer = new QCompleter(slAddr,this);
m_completer->setFilterMode(Qt::MatchStartsWith);
m_completer->setCaseSensitivity(Qt::CaseInsensitive);
}
void ComplexCombox::showPopup()
{
emit sigGetCurtBtnIndex(m_iComboxIndex);//没必要,我自己需求需要的
QComboBox::clear();//有必要
QString sCurrentText = this->currentText();//有必要
//这里可以选择你想要下拉框展示的数据
//可以读文件读其他什么的,自己看自己要什么
for(int i=0;i<m_qlAddr.size();i++)
{
addItem(m_qlAddr.value(i));
if(qlTempUsedAddr.contains(m_qlAddr.value(i)))
{
this->setItemData(i,QColor(USED_ADDR_COLOR),Qt::BackgroundColorRole);
//这个可以添加下拉项的背景颜色,也可以根据自己需求来安排
//给下拉框的每一个item添加颜色或者图片可以用setItemData,添加颜色或者图片取决于第三个参数(this就是重载的QComboBox)
}
else
{
this->setItemData(i,QColor(COMMOM_ADDR_COLOR),Qt::BackgroundColorRole);
}
}
setCurrentText(sCurrentText);//有必要
QComboBox::showPopup();//有必要
}
边栏推荐
- Krypton Factor-紫书第七章暴力求解
- Using LNMP to build WordPress sites
- JVM的简介
- UVA – 11637 Garbage Remembering Exam (组合+可能性)
- 11gR2 Database Services for &quot;Policy&quot; and &quot;Administrator&quot; Managed Databases (文件 I
- 14种神笔记方法,只需选择1招,让你的学习和工作效率提高100倍!
- Comparison between webgl and webgpu [3] - vertex buffer
- Development specification: interface unified return value format [resend]
- 判斷二叉樹是否為完全二叉樹
- 进击的技术er——自动化
猜你喜欢
YML configuration, binding and injection, verification, unit of bean
Non rigid / flexible point cloud ICP registration
How to design API return code (error code)?
Practice of concurrent search
Pyqt control part (I)
Week 17 homework
Technical specifications and model selection guidelines for TVs tubes and ESD tubes - recommended by jialichuang
Go language implementation principle -- map implementation principle
基于脉冲神经网络的物体检测
February 13, 2022-4-symmetric binary tree
随机推荐
Multi view 3D reconstruction
Initial experience | purchase and activate typora software
Use of grpc interceptor
VS2010编写动态链接库DLL和单元测试,转让DLL测试的正确性
2:第一章:认识JVM规范1:JVM简介;
Code farmers to improve productivity
TVS管和ESD管的技術指標和選型指南-嘉立創推薦
Golang code checking tool
Three. JS VR house viewing
AsyncSocket长连接棒包装问题解决
Three. Js-01 getting started
2.13 summary
数学公式截图识别神器Mathpix无限使用教程
February 13, 2022 -5- maximum depth of binary tree
Week 17 homework
代码农民提高生产力
[original] what is the core of programmer team management?
Data type, variable declaration, global variable and i/o mapping of PLC programming basis (CoDeSys)
Déterminer si un arbre binaire est un arbre binaire complet
秒杀系统的设计与实现思路