QListWidget 禁用鼠标悬停突出显示
QListWidget disable mouseover highlight
我有一个 QListWidget,其中有几个 QListWidgetItems 仅包含文本但具有不同的背景颜色。默认情况下,当我将鼠标悬停在项目上时,这些项目会以蓝色条突出显示。如何禁用突出显示?
我使用的代码
//add spacer
QListWidgetItem *spacer = new QListWidgetItem("foo");
spacer->setBackgroundColor(QColor(Qt::gray));
spacer->setFlags(Qt::ItemIsEnabled); //disables selectionable
ui->listWidget->addItem(spacer);
提前致谢。
spacer
是带有当天名称的灰色项目
编辑:添加图片link(截图工具工具隐藏鼠标,第 6 项突出显示)
您可以使用 Qt CSS 覆盖 "hover" 上的背景,如果您使用的是 "gray" 颜色:
spacer->setStylesheet("*:hover {background:gray;}");
中所述对整个列表进行样式设置
QListView::item:hover {
background: gray
}
我设法通过覆盖 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);
}
我有一个 QListWidget,其中有几个 QListWidgetItems 仅包含文本但具有不同的背景颜色。默认情况下,当我将鼠标悬停在项目上时,这些项目会以蓝色条突出显示。如何禁用突出显示?
我使用的代码
//add spacer
QListWidgetItem *spacer = new QListWidgetItem("foo");
spacer->setBackgroundColor(QColor(Qt::gray));
spacer->setFlags(Qt::ItemIsEnabled); //disables selectionable
ui->listWidget->addItem(spacer);
提前致谢。
spacer
是带有当天名称的灰色项目
编辑:添加图片link(截图工具工具隐藏鼠标,第 6 项突出显示)
您可以使用 Qt CSS 覆盖 "hover" 上的背景,如果您使用的是 "gray" 颜色:
spacer->setStylesheet("*:hover {background:gray;}");
中所述对整个列表进行样式设置
QListView::item:hover {
background: gray
}
我设法通过覆盖 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);
}