2011-02-02 25 views
0

大家好,Extrend QAbstractListModel显示自定义背景颜色?

http://oi51.tinypic.com/6hrm9w.jpg

我已经延长我自己QAbstractListModel改变QCombobox的背景色。如图所示,我有两个问题。 1)如第一张图像快照所示,背景颜色不会出现在所选项目中。 2)选择项目时,背景变为默认高亮颜色(浅蓝色)

是否有解决这两个问题的方法?

这是我的QAbstractListModel实现。



RzContourLabelModel::RzContourLabelModel(RzContourLabelContext *contourLabelCtx,int max,QObject *parent) : QAbstractListModel(parent){ 


    contourCtx=contourLabelCtx; 
    QList contourLabels=contourLabelCtx->getLabels(); 

    for(int i=0;i= colorLabels.size()) 
       return QVariant(); 

     if (role == Qt::DisplayRole){ 
      QString str; 
      str.setNum(colorLabels.at(index.row())); 
      return str; 
     } 

     if (role == Qt::BackgroundRole) 
     { 
      int labelNum=colorLabels.at(index.row()); 
      QColor col= contourCtx->getLabelColor(labelNum); 
      return col; 
     } 
       return QVariant(); 
} 
 
+0

如何不想按颜色可视化选择?也许尝试用setSelectionMode(NoSelection)禁用选择。不知道是否QComboBox可以处理。 – 2011-02-02 07:06:34

回答

2

这两个功能(所选项目的背景和突出显示的颜色)由视图控制。下面是从文档报价:

对于在组合框中标签文本和图标,用于在具有Qt::DisplayRoleQt::DecorationRole模型中的数据。

所以所选项目的背景不会很容易改变。相反,您可能需要制作颜色图标并将其作为模型中的Qt::DecorationRole返回。

对于突出显示的颜色 - 您可以使用自定义项目代理重新实现此功能。见QComboBox::setItemDelegate

2

您可以尝试使用Qt CSS玩...

不知道这帮助你,但它可以:

QComboBox QAbstractItemView { 
    selection-background-color: Transparent; 
    selection-color: Black; 
} 

它上色选择阻止,唯一的事情我不知道关于 - 是否会在选择的情况下绘制小部件的背景或您的项目的背景。如果它将绘制小部件的背景 - 它是无用的:(