Qt鼠标悬停在QGraphicsPixmapItem上后显示工具提示
Qt Display tooltip after mouse hover on QGraphicsPixmapItem
我使用QGraphicView来显示包含QGraphicsPixmapItems的游戏地图。我需要显示工具提示鼠标悬停在QGraphicsPixmapItem。
用于保存QGraphicsPixmapItem位置I使用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;
}
在错误的对象上添加工具提示:
代替:
mazeItem.setToolTip("text");
应该是:
mazeItem.pixmap->setToolTip("text");
相关文章:
- 如何在动态创建的CMFCToolbar的工具提示中添加描述?
- 添加带有 QSyntaxHighlight 和 QTextCharFormat 的工具提示
- CScrollView 中的跟踪工具提示?
- 当鼠标悬停在 MFC C++ 中列表控件的列标题上时,可视显示工具提示
- if/else 循环:C++程序:不会显示最终提示/最终循环
- 在 MFC C++中悬停列表控件的列标题的可视化显示工具提示
- 无法隐藏工具提示
- 更新模型/视图方案中 QXXXView (QTableView, QTreeView,..) 元素的显示工具提示
- 将工具提示添加到 ComboBoxEx 失败
- 如何在 c++/cli 中增加工具提示的大小
- QT 4.7-在OS X 10.12下,工具提示和Qcombobox弹出窗口空白
- QLineEdit:如果鼠标悬停,则显示超长文本作为工具提示
- Visual studio调试工具提示-隐藏变量
- C++Listview工具提示
- 鼠标悬停在TableView上时显示工具提示
- 如何显示动态工具提示
- 如何在C++Builder中长时间显示工具提示
- Qt鼠标悬停在QGraphicsPixmapItem上后显示工具提示
- 没有显示MFC CMenu工具提示
- Qt工具提示在显示时将窗口置于前面