当我将QStyledItemDelegate (Qt5)悬停在QTreeView行上时,我使用它来绘制QPixmap。
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上正常工作,但我无法让它在OSX10.11上工作。在OS X上,悬停时根本不调用paint()。当我单击一行、调整窗口大小等时调用它。我发现:
paint(),因为没有必要任何其他窗口管理器都可以和OS一样。我不能全部测试它们。有没有办法确保paint()在悬停时被调用,即使操作系统不需要它?
发布于 2016-10-18 18:39:33
我对我的问题找到了一个可能不好的解决办法。
#ifdef __APPLE__
treeView->setStyleSheet("QTreeView::item:hover{}");
#endif正如您所看到的,我在QTreeView::item:hover上添加了一个空的css声明,这会使Qt在鼠标超过项目时调用paint()。
#ifdef甚至不需要,因为它没有破坏其他OSes上的任何东西。
paint()和以前一样经常被调用。但我不能说我是这个解决方案的粉丝。看上去确实像黑客。空css声明不应更改任何内容。Qt可以在将来的版本中修复这个"bug“,并且它将停止工作。
https://stackoverflow.com/questions/40114244
复制相似问题