0

我有一个 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是带有当天名称的灰色项目

编辑:添加图片链接(截图工具工具隐藏鼠标,第 6 项突出显示)

4

2 回答 2

1

我设法通过覆盖该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);
}
于 2017-02-23T16:26:19.937 回答
0

您可以使用 Qt CSS 覆盖“悬停”的背景,如果您使用的是“灰色”颜色:

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

或者按照Qt 样式表示例中的描述设置整个列表的样式

QListView::item:hover {
    background: gray
}
于 2017-02-22T22:50:47.220 回答