2011-02-02 12 views
0

挨拶すべて、カスタム背景色を表示するExtrend QAbstractListModel?

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

私はQComboboxの背景色を変更するために自分のQAbstractListModelを高めています。 イメージを見ても分かるように、私には2つの問題があります。 1)最初のイメージスナップショットに示されているように、選択した項目に背景色が表示されません。 2)アイテムを選択すると、背景がデフォルトのハイライトカラー(明るい青色)に変わります

これらの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でそれを処理できるかどうかはわかりません。 –

答えて

2

両方の機能(選択した項目の背景とハイライトの色)は、ビューによって制御されます。ここではドキュメントからの引用です:

コンボボックスのラベルのテキストとアイコンのためには、Qt::DisplayRoleQt::DecorationRoleを持っているモデルのデータが使用されています。

したがって、選択した項目の背景は変更しにくいでしょう。代わりに、カラーアイコンを作成し、モデル内のQt::DecorationRoleとして返すことができます。

強調表示の色については、これをカスタムアイテムデリゲートで再実装することができます。

それは選択を着色することを防止する
QComboBox QAbstractItemView { 
    selection-background-color: Transparent; 
    selection-color: Black; 
} 

、唯一のことは、私は確認していない:QComboBox::setItemDelegate

2

あなたはQtのCSSでプレイしようとするかもしれない...

わからないこのヘルプあなたはそれがかもしれ参照してください。 about - ウィジェットの背景や選択の際のアイテムの背景をペイントしますか? (

関連する問題