问:如何更改特定QComboBox项目的突出显示颜色

 JKNx2602931435 发布于 2023-01-30 15:21

我正在努力使QComboBox的高亮显示透明.此QComboBox的颜色也会根据所选索引而更改.这是迄今为止我最好的解决方案:

switch(comboBox->currentIndex())
{
case 0:
    comboBox->setStyleSheet("QWidget {color:black}");
    break;

case 1:
    comboBox->setStyleSheet("QWidget {background-color:red; color:white;}");
    break;

case 2:
    comboBox->setStyleSheet("QWidget {background-color:green; color:white;}");
    break;
}


comboBox->setItemData(0, QColor(Qt::white), Qt::BackgroundRole);
comboBox->setItemData(0, QColor(Qt::black), Qt::ForegroundRole);
comboBox->setItemData(1, QColor(Qt::red), Qt::BackgroundRole);
comboBox->setItemData(1, QColor(Qt::white), Qt::ForegroundRole);
comboBox->setItemData(2, QColor(Qt::darkGreen), Qt::BackgroundRole);
comboBox->setItemData(2, QColor(Qt::white), Qt::ForegroundRole);

QPalette p = comboBox->palette();
p.setColor(QPalette::Highlight, Qt::transparent);
comboBox->setPalette(p);

p = comboBox->view()->palette();
p.setColor(QPalette::Highlight, Qt::transparent);

comboBox->view()->setPalette(p);

问题是QComboBox当前的颜色是弹出窗口中选择项目时的高亮颜色.我希望每个QComboBox项目保持相同的颜色.图像显示了我遇到的问题.

在此输入图像描述 在此输入图像描述 在此输入图像描述

1 个回答
  • 如果我正确理解了这个问题,你想要完全删除突出显示的颜色,这样鼠标光标下的项目只会被虚线框区分.

    执行此操作的一种方法如下:我们创建继承自的类QItemDelegate(通常简单QItemDelegate负责绘制QComboBox项).我们覆盖paint函数,如下所示:

    class SelectionKillerDelegate : public QItemDelegate
    {
        virtual void paint(QPainter *painter,
            const QStyleOptionViewItem &option,
            const QModelIndex &index) const override
         {
             QStyleOptionViewItem myOption = option;
             myOption.state &= (~QStyle::State_Selected);
             QItemDelegate::paint (painter, myOption, index);
         }
     };
    

    基本上我们只是使用普通的绘画功能函数,但假装所有的项目都没有QStyle::State_Selected在内部的几个函数中进行检查QItemDelegate::paint,最重要的是drawBackground其中很遗憾不是虚拟的.

    当我们只是comboBox->setItemDelegate (new SelectionKillerDelegate)用来使我们的委托而不是简单QItemDelegate.就这样.

    好处是使用QStyle::State_HasFocus如此虚线框确定焦点项目,即使使用此委托,鼠标光标指向的项目仍然可见.

    2023-01-30 15:22 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有