首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QAbstractItemModel装饰工具提示

QAbstractItemModel装饰工具提示
EN

Stack Overflow用户
提问于 2018-11-08 20:07:22
回答 1查看 366关注 0票数 1

我正在尝试显示QAbstractItem的工具提示,但仅当我将鼠标悬停在装饰上时。

如果我设置了Qt::ToolTipRole,那么如果我将鼠标悬停在整个项目上,就会得到工具提示。

对model::data(..)的调用只有takes、索引和角色,所以我不能指定工具提示的有效区域。

以前有没有人成功做过这样的事情?

我也为模型设置了一个委托,我想我可以使用编辑器事件,但这不能捕获QEvent::Tooltip?

也许仅仅是一个应用于委托或视图的事件过滤器就能有所帮助?

EN

回答 1

Stack Overflow用户

发布于 2018-11-08 21:59:27

我将使用安装在目标items视图上的事件过滤器按以下方式完成此操作:

代码语言:javascript
复制
class Filter : public QObject
{
protected:
  bool eventFilter(QObject * watched, QEvent * event) override
  {
    if (auto view = qobject_cast<QAbstractItemView *>(watched)) {
      if (event->type() == QEvent::ToolTip) {
        auto helpEvent = static_cast<QHelpEvent *>(event);
        auto pos = view->viewport()->mapFrom(view, helpEvent->pos());
        auto index = view->indexAt(pos);

        // Assuming that the decoration size is 16x16
        auto rect = QRect(view->visualRect(index).topLeft(), QSize(16, 16));
        if (rect.contains(pos)) {
          QToolTip::showText(helpEvent->globalPos(), "This is a tooltip");
        }
      }
    }
    return false;
  }
};

在视图上安装此筛选器:

代码语言:javascript
复制
QTreeWidget tw;
auto item = new QTreeWidgetItem(&tw, QStringList() << "Test");
item->setIcon(0, QIcon("icon.png"));

Filter filter;
tw.installEventFilter(&filter);

它处理所有工具提示事件,检查装饰上是否发生事件,如果发生,则显示带有文本的工具提示。

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

https://stackoverflow.com/questions/53207434

复制
相关文章

相似问题

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