鼠标悬停在 QGraphicsPixmapItem 上后 Qt 显示工具提示
Posted
技术标签:
【中文标题】鼠标悬停在 QGraphicsPixmapItem 上后 Qt 显示工具提示【英文标题】:Qt Display tooltip after mouse hover on QGraphicsPixmapItem 【发布时间】:2014-05-10 19:04:47 【问题描述】:我正在使用 QGraphicView 来显示包含 QGraphicsPixmapItems 的游戏地图。我需要在鼠标悬停在 QGraphicsPixmapItem 时显示工具提示。
为了保存 QGraphicsPixmapItem 位置,我使用 MazeItem:
#ifndef MAZEITEM_H
#define MAZEITEM_H
#include <QPoint>
#include <QGraphicsItem>
class MazeItem
private:
QPoint myPosition;
QString myToolTip;
public:
MazeItem();
QPoint position() const;
QString toolTip() const;
void setToolTip(const QString &toolTip);
void setPosition(const QPoint &position);
QPoint getPosition();
QGraphicsPixmapItem * pixmap;
;
#endif // MAZEITEM_H
我有小部件类来显示游戏地图:
#include <QWidget>
#include <QtGui>
#include <QGraphicsView>
#include <QToolTip>
#include "mazeitem.h"
class MazeGUI : public QWidget
Q_OBJECT
private:
QGraphicsView * graphicsView;
QGraphicsScene * graphicsScene;
QString sceneString;
int imageSize;
QList<MazeItem> mazeItems;
void addItem(int x, int y, QPixmap picture);
bool event(QEvent *event);
int itemAt(const QPoint &pos);
public:
explicit MazeGUI(QWidget *parent = 0);
void setScene(QString sceneString);
signals:
public slots:
void redraw();
;
#endif // MAZEGUI_H
在构造函数中我设置了鼠标跟踪。
MazeGUI::MazeGUI(QWidget *parent) :
QWidget(parent)
setMouseTracking(true);
...
这就是我添加新迷宫项目的方式。
void MazeGUI::addItem(int x, int y, QPixmap picture)
MazeItem mazeItem;
mazeItem.setPosition(QPoint(x, y));
mazeItem.setToolTip("text");
mazeItem.pixmap = this->graphicsScene->addPixmap(picture);
mazeItem.pixmap->setPos(y, x);
mazeItems.append(mazeItem);
这是我从 Qt 教程中获得的,
bool MazeGUI::event(QEvent *event)
if (event->type() == QEvent::ToolTip)
// HERE - it never goes here!!
QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
int index = itemAt(helpEvent->pos());
if (index != -1)
QToolTip::showText(helpEvent->globalPos(), mazeItems[index].toolTip());
else
QToolTip::hideText();
event->ignore();
return true;
return QWidget::event(event);
int MazeGUI::itemAt(const QPoint &pos)
for (int i=0; i < mazeItems.size(); ++i)
if (mazeItems[i].getPosition() == pos)
return i;
return -1;
【问题讨论】:
那有什么问题? 问题是tooltip没有出现,甚至连启动都打不开。 【参考方案1】:在错误的对象上添加了工具提示:
代替:
mazeItem.setToolTip("text");
应该是:
mazeItem.pixmap->setToolTip("text");
【讨论】:
以上是关于鼠标悬停在 QGraphicsPixmapItem 上后 Qt 显示工具提示的主要内容,如果未能解决你的问题,请参考以下文章