当鼠标光标离开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中最后一个悬停项目的悬停状态。

当光标离开列表视图时,是否有一种方法可以强制委托重新绘制并且不在鼠标悬停状态?

我正在使用Qt 5.6,并且已经在Centos 7和Fedora 27和28上进行了测试。

最佳答案

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

我也在QT 5.10上测试了代码,并且在那儿工作正常。

关于c++ - 当鼠标离开QListView时,ListViewItem停留在鼠标悬停状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50570922/

10-11 18:23