我是靠谱客的博主 着急身影,最近开发中收集的这篇文章主要介绍QComboBox下拉列表不同项设置不同背景色,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、要实现的效果

要实现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下拉列表不同项设置不同背景色所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部