2017-02-22 12 views
0

私は、テキストだけを含んでいるが背景色が異なる複数のQListWidgetItemsを持つQListWidgetを持っています。デフォルトでは、アイテムの上にマウスを置くと、項目が青色のバーで強調表示されます。ハイライトを無効にするにはどうしたらいいですか?QListWidgetはマウスオーバーハイライトを無効にします

コードは、私が事前に

//add spacer 
QListWidgetItem *spacer = new QListWidgetItem("foo"); 
spacer->setBackgroundColor(QColor(Qt::gray)); 
spacer->setFlags(Qt::ItemIsEnabled); //disables selectionable 
ui->listWidget->addItem(spacer); 

感謝を使用しています。

spacer

EDITの名前を持つ灰色の項目である:あなたが背景をオーバーライドすることができます追加画像リンク(ツールツールをつむことは、マウスを隠し、第六項目がハイライトされている)

答えて

0

で説明私はQStyledItemDelegate::paintメソッドをオーバーライドするカスタムアイテムのデリゲートでそれを行うことができました。

void ActivitiesItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const 
{ 

//determine if index is spacer 
//TODO non-hacky spacer detection 
bool spacer = false; 
QString text = index.data().toString(); 
if(  (text == "Monday") 
     || (text == "Tuesday") 
     || (text == "Wednesday") 
     || (text == "Thursday") 
     || (text == "Friday") 
     || (text == "Saturday") 
     || (text == "Sunday") 
){ 
    spacer = true; 
} 

if(option.state & QStyle::State_MouseOver){ 
    if(spacer){ 
     painter->fillRect(option.rect, QColor(Qt::gray)); 
    }else{ 
     painter->fillRect(option.rect, QColor(Qt::white)); 
    } 
    painter->drawText(option.rect.adjusted(3,1,0,0), text); 
    return; 
} 

//default 
QStyledItemDelegate::paint(painter, option, index); 
} 
0

上で使用している場合は与えて、QtのCSSで「ホバー」「グレー」色:

spacer->setStylesheet("*:hover {background:gray;}"); 

または全部をリストとしてスタイリングQt Style sheet examples

QListView::item:hover { 
    background: gray 
} 
+0

リストに2つの背景色があります。 1つの背景が白く、もう1つは灰色になるように定義するには – Tac0

+0

で2番目の色を設定できます。QListView :: item:alternate { background:#EEEEEE; } –

+0

代替プロパティの使用が正しくありません。スペーサーアイテムの下にアクティビティーが増えると、色が正しく適用されなくなります。私はQListWidgetItemsテキストに基づいてホバーの背景を設定する方法を探しています。 QSSから参照するためにカスタムタイプのプロパティを割り当てることはできますか? – Tac0

関連する問題