我正在尝试显示QAbstractItem的工具提示,但仅当我将鼠标悬停在装饰上时。
如果我设置了Qt::ToolTipRole,那么如果我将鼠标悬停在整个项目上,就会得到工具提示。
对model::data(..)的调用只有takes、索引和角色,所以我不能指定工具提示的有效区域。
以前有没有人成功做过这样的事情?
我也为模型设置了一个委托,我想我可以使用编辑器事件,但这不能捕获QEvent::Tooltip?
也许仅仅是一个应用于委托或视图的事件过滤器就能有所帮助?
发布于 2018-11-08 21:59:27
我将使用安装在目标items视图上的事件过滤器按以下方式完成此操作:
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;
}
};在视图上安装此筛选器:
QTreeWidget tw;
auto item = new QTreeWidgetItem(&tw, QStringList() << "Test");
item->setIcon(0, QIcon("icon.png"));
Filter filter;
tw.installEventFilter(&filter);它处理所有工具提示事件,检查装饰上是否发生事件,如果发生,则显示带有文本的工具提示。
https://stackoverflow.com/questions/53207434
复制相似问题