当鼠标光标离开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
}
这将调用leave代理的paint方法,但不会更改QListView中最后悬停的项的悬停状态。
有没有办法强制代理重新绘制,并且当光标离开列表视图时不处于鼠标悬停状态?
我使用的是Qt 5.6,我已经在Centos 7和Fedora 27和28上进行了测试。
发布于 2018-05-30 22:02:04
这似乎是QT 5.6版本中的一个bug。我把QT版本升级到了5.11,解决了这个问题。升级后不需要实现QListView::leaveEvent。
我还在QT 5.10上测试了代码,它在那里运行得很好。
https://stackoverflow.com/questions/50570922
复制相似问题