悬停时显示QTreeWidgetItem的工具提示,而不对每个项目调用setTooltip()

悬停时显示QTreeWidgetItem的工具提示,而不对每个项目调用setTooltip(),qt,tooltip,qtreewidget,qtreewidgetitem,Qt,Tooltip,Qtreewidget,Qtreewidgetitem,我想显示悬停的QTreeWidgetItem的工具提示。然而,在我的例子中,获取工具提示并不是一个很快的过程,所以我不想为每个项目调用setTooltip。我想按要求去做,在某个事件或信号上。最简单的方法是什么?我认为,如果迁移到QTreeView/Model模式,应该更容易实现您想要的 QabstracteModel具有工具提示的角色:Qt::ToolTipRole 您可以将模型子类化以重新实现 QVariant QAbstractItemModel::data ( const QModelI

我想显示悬停的QTreeWidgetItem的工具提示。然而,在我的例子中,获取工具提示并不是一个很快的过程,所以我不想为每个项目调用setTooltip。我想按要求去做,在某个事件或信号上。最简单的方法是什么?

我认为,如果迁移到QTreeView/Model模式,应该更容易实现您想要的

QabstracteModel具有工具提示的角色:Qt::ToolTipRole

您可以将模型子类化以重新实现

QVariant QAbstractItemModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) const [pure virtual
方法


因此,当接收到Qt::TooltipRole时,它会从内部缓存计算/恢复。

我认为,如果迁移到QTreeView/Model模式,应该更容易实现您想要的

QabstracteModel具有工具提示的角色:Qt::ToolTipRole

您可以将模型子类化以重新实现

QVariant QAbstractItemModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) const [pure virtual
方法


因此,当收到Qt::TooltipRole时,它会从内部缓存计算/恢复。

我找到的最佳解决方案是将QTreeWidgetItem子类化,覆盖虚拟QVariant dataint列,int role const;当为Qt::ToolTipRole调用数据时,返回此项的工具提示。

我找到的最佳解决方案是将QTreeWidgetItem子类化,重写虚拟QVariant dataint列,int role const;并在为Qt::ToolTipRole调用数据时返回此项的工具提示。

请注意,由于QTreeWidget继承自QTreeView,您可以指定自定义模型。但它有点像苹果和橙子的混合。我从来没有使用过QTreeView,它似乎过于复杂了,没有什么好的理由,只要我从来没有做过一些直到现在都不可能用Widget做的事情。使用QTreeWidget无法实现这一点吗?是否可以重新实现QTreeWidget::mouseEvent以获取QHoverEvent,计算鼠标在哪个项目上并显示工具提示?有一个QEvent::tooltip,因此,我认为您可以通过eventfilter筛选事件,但不确定是安装在treeWidget中还是安装在每个treeWidgetItem中。请注意,由于QTreeWidget继承自QTreeView,您可以为您分配自定义模型。但它有点像苹果和橙子的混合。我从来没有使用过QTreeView,它似乎过于复杂了,没有什么好的理由,只要我从来没有做过一些直到现在都不可能用Widget做的事情。使用QTreeWidget无法实现这一点吗?是否可以重新实现QTreeWidget::mouseEvent以获取QHoverEvent,计算鼠标在哪个项目上并显示工具提示?有一个QEvent::tooltip,所以我想你可以通过一个eventfilter来过滤事件,不确定是安装在treeWidget中还是安装在每个treeWidgetItem.lol中,所以,基本上,就是我说的,但不改变模型/视图。抱歉,不知道我是如何意识到它必须是小部件项中的数据方法的:S@Trompa:是的,而且根本没有模特儿:无论如何,你应该试试看;。使用QStandardItemModel,您将使用类似于WidgetItems的QStandardItems,您将获得decoupling.lol,因此,基本上,我所说的,但不更改为model/view。抱歉,不知道我是如何意识到它必须是小部件项中的数据方法的:S@Trompa:是的,而且根本没有模特儿:无论如何,你应该试试看;。使用QStandardItemModel,您将使用类似于WidgetItems的QStandardItems,并且可以实现解耦。