2017-02-22 5 views
0

Ich habe ein QListWidget mit mehreren QListWidgetItems, die nur Text aber mit unterschiedlichen Hintergrundfarben enthalten. Standardmäßig werden die Elemente mit einem blauen Balken hervorgehoben, wenn ich mit der Maus darüber blicke. Wie kann ich die Hervorhebung deaktivieren?QListWidget mouseover deaktivieren highlight

Der Code Ich benutze

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

Vielen Dank im Voraus.

spacer ist die graue Element mit dem Namen des Tages

EDIT: hinzugefügt Bild Link (Snipping Tool Werkzeug Maus verbirgt, ist der 6. Element markiert)

Antwort

0

schaffte ich es mit einem benutzerdefinierten Element Delegierten zu tun.

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

Sie den Hintergrund außer Kraft setzen können auf "Hover" mit Qt CSS, geben, wenn Sie "graue" Farbe verwenden:

Oder Styling der gesamten Liste als Überschreiben der QStyledItemDelegate::paint Verfahren beschrieben in Qt Style sheet examples

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

Ich habe 2 Hintergrundfarben in der Liste. Wie kann ich definieren, dass ein Hintergrund weiß und der andere grau wird? – Tac0

+0

Sie können eine zweite Farbe mit QListView :: Artikel: alternative { Hintergrund: #EEEEEE; } –

+0

Die alternative Eigenschaft ist nicht korrekt. Wenn sich unter einem Abstandselement weitere Aktivitäten befinden, werden die Farben falsch angewendet. Ich suche nach einer Möglichkeit, den Hover-Hintergrund basierend auf dem QListWidgetItems-Text festzulegen. Oder vielleicht eine benutzerdefinierte Typeigenschaft zuweisen, auf die sich das QSS bezieht? – Tac0

Verwandte Themen