当我将鼠标悬停在QStyledItemDelegate
行时,我使用QPixmap
(Qt5)绘制QTreeView
。
void ActionsItemDelegate::paint(
const QStyleOptionViewItem &option,
const QModelIndex& selectedProxy) const
{
QStyledItemDelegate::paint(painter, option, selectedProxy);
if (option.state & QStyle::State_MouseOver)
{
Draw qpixmap ...
}
}
它在Windows和Linux上按预期工作,但我不能让它在OS X 10.11上运行。在OS X上悬停时根本不会调用paint()
。当我点击一行,调整窗口大小等时调用它。我发现:
paint()
,因为不需要任何其他Window Manager都可以和OS X一样。我无法测试它们。有没有办法确保即使操作系统不需要它也会在悬停时调用paint()
?
答案 0 :(得分:1)
我找到了解决问题的[可能很糟糕]。
#ifdef __APPLE__
treeView->setStyleSheet("QTreeView::item:hover{}");
#endif
正如您所看到的,我在QTreeView::item:hover
上添加了一个空的css声明,只要鼠标在某个项目上,就会欺骗Qt调用paint()
。
#ifdef
甚至不需要,因为它没有破坏其他操作系统上的任何内容。
paint()
就像以前一样经常被调用我不能说我是这个解决方案的粉丝。它确实看起来像一个黑客。一个空的css声明不应该改变任何东西。 Qt可以解决这个问题" bug"在未来的版本上,它将停止工作。