概述
一、要实现的效果
要实现QComboBox下拉列表不同项设置不同背景色,选中后编辑框背景色变成选中项的背景色
二、解决思路
可以通过设置QComboBox的setItemData来设置背景色和字体颜色,通过设置QComboBox的编辑框QLineEdit的styleSheet方法来设置编辑框的背景色,通过对QComboBox的highlighted和activated信号的处理来改变鼠标进入项的高亮颜色和选中项QLineEdit的背景色
三、核心代码
核心代码如下:
QComboBox* comb=new QComboBox();
//必须设置为true,不然QLineEdit为空指针,不能设置styleSheet
comb->setEditable(true);
comb->addItems(QStringList()<<"红"<<"绿"<<"蓝");
QList<QColor> colors;
colors<<Qt::red<<Qt::green<<Qt::blue;
for(int i=0;i<3;i++)
{
//设置项背景色
comb->setItemData(i,colors[i],Qt::BackgroundRole);
//设置项字体颜色
comb->setItemData(i,QColor(Qt::black),Qt::ForegroundRole);
}
comb->lineEdit()->setStyleSheet("background-color:red;color:white");
//因为默认的高亮颜色为蓝色会覆盖背景色处理,处理highlighted信号,获取选项项对应的背景颜色设置高亮颜色,
QObject::connect(comb, QOverload<int>::of(&QComboBox::highlighted),
[=](int index){
comb->setStyleSheet(QString("selection-background-color:%1;color:white").arg(
comb->itemData(index,Qt::BackgroundRole).value<QColor>().name()));
});
//处理activated信号,获取选项项对应的背景颜色设置QLineEdit的背景色,
QObject::connect(comb, QOverload<int>::of(&QComboBox::activated),
[=](int index){
comb->lineEdit()->setStyleSheet(QString("background-color:%1;").arg(
comb->itemData(index,Qt::BackgroundRole).value<QColor>().name()));
});
最后
以上就是着急身影为你收集整理的QComboBox下拉列表不同项设置不同背景色的全部内容,希望文章能够帮你解决QComboBox下拉列表不同项设置不同背景色所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复