2017-02-22 177 views
0

我有一個QListWidget幾個QListWidgetItems只包含文本,但具有不同的背景顏色。默認情況下,當我將鼠標懸停在項目上時,這些項目會突出顯示藍條。我如何禁用突出顯示?QListWidget禁用鼠標懸停突出顯示

的代碼我使用

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

在此先感謝。

spacer是與天

編輯名稱的灰色項:添加圖片鏈接(截圖工具工具隱藏鼠標,第6項被高亮顯示)

回答

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種背景顏色。我怎樣才能定義一個背景變白,另一個灰色? – Tac0

+0

您可以使用 設置第二種顏色QListView :: item:alternate {background}:#EEEEEE; } –

+0

使用備用屬性不正確。當間隔項目下有更多活動時,顏色會被錯誤應用。我正在尋找一種方法來設置基於QListWidgetItems文本的懸停背景。或者也許分配一個自定義類型屬性來引用QSS? – Tac0

相關問題