【发布时间】:2018-05-28 17:11:17
【问题描述】:
当鼠标光标离开 QListview 时,我正在尝试从项目中删除鼠标悬停状态。
我在 QStyledItemDelegate 中检查鼠标悬停状态如下:
void MyDelegate::paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if( option.state & QStyle::State_MouseOver)
{
// Paint in MouseOver state
}
else
{
// Paint normally
}
}
然后我在我的 QListView 中实现了 leaveEvent 来调用更新。
void MyListView::leaveEvent(QEvent *event)
{
// update();
QListView::leaveEvent(event);
update(); // Same result if update() called before or after QListView::leaveEvent
}
这确实会调用休假委托的绘制方法,但不会更改 QListView 中最后悬停的项目的悬停状态。
当光标离开列表视图时,有没有办法强制代理重新绘制而不是处于鼠标悬停状态?
我使用的是 Qt 5.6,并且已经在 Centos 7 和 Fedora 27 和 28 上进行了测试。
【问题讨论】:
-
只是一枪成蓝色:您是否尝试过使用
viewport()->update();而不是update();?我在继承自QAbstractScrollArea的其他小部件中也遇到了类似的问题。顺便提一句。我什至在QAbstractItemView中发现了这一点:注意: 如果您继承 QAbstractItemView 并打算更新视口的内容,则应使用 viewport->update() 而不是 update()因为所有的绘画操作都发生在视口上。 -
我刚刚尝试过,没有运气。我将尝试将我的 Qt 版本更新到最新版本,看看它是否能解决问题。