首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OS X TreeView涂料

OS X TreeView涂料
EN

Stack Overflow用户
提问于 2016-10-18 17:11:33
回答 1查看 39关注 0票数 0

当我将QStyledItemDelegate (Qt5)悬停在QTreeView行上时,我使用它来绘制QPixmap

代码语言:javascript
复制
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()。当我单击一行、调整窗口大小等时调用它。我发现:

  • 窗口高亮显示悬停时的行。
  • Linux (至少是薄荷)在悬停时高举复选框。
  • OS在悬停时不改变任何像素,所以它不调用paint(),因为没有必要

任何其他窗口管理器都可以和OS一样。我不能全部测试它们。有没有办法确保paint()在悬停时被调用,即使操作系统不需要它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 18:39:33

我对我的问题找到了一个可能不好的解决办法。

代码语言:javascript
复制
#ifdef __APPLE__
    treeView->setStyleSheet("QTreeView::item:hover{}");
#endif

正如您所看到的,我在QTreeView::item:hover上添加了一个空的css声明,这会使Qt在鼠标超过项目时调用paint()

#ifdef甚至不需要,因为它没有破坏其他OSes上的任何东西。

  • 我测试得很快,认为 paint()和以前一样经常被调用。
  • 它不会更改其他OSes上的默认UI样式,因为css声明是空的。

但我不能说我是这个解决方案的粉丝。看上去确实像黑客。空css声明不应更改任何内容。Qt可以在将来的版本中修复这个"bug“,并且它将停止工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40114244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档