当鼠标离开QListView时,ListViewItem卡在鼠标悬停状态

时间:2018-05-28 17:11:18

标签: c++ qt qt5

当鼠标光标离开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来调用update。

void MyListView::leaveEvent(QEvent *event)
{
   // update();  
   QListView::leaveEvent(event);
   update();   // Same result if update() called before or after QListView::leaveEvent 
}

这会在休假时调用委托的paint方法,但不会更改最后在QListView中悬停的项目的悬停状态。

当光标离开listview时,有没有办法强制委托重绘并且不处于鼠标悬停状态?

我使用的是Qt 5.6,我在Centos 7和Fedora 27和28上测试过它。

1 个答案:

答案 0 :(得分:1)

这似乎是QT 5.6版本中的一个错误。 我将QT版本升级到5.11,解决了这个问题。升级后无需实现QListView :: leaveEvent。

我还测试了QT 5.10上的代码,它在那里工作正常。