0x00 原理
在Qt的图形视图框架中,核心的三个类为:QGraphicsScene、QGraphicsItem与QGraphicsView。
为了使用鼠标响应事件,我们自定义一个QGraphicsScene类,并重载其鼠标响应函数。
0x01 Scene
编写自定义QGraphicsScene类,命名为Page
#pragma once
#include <QMouseEvent>
#include <QGraphicsSceneMouseEvent>
#include <QPaintEvent>
#include <QKeyEvent>
#include <QGraphicsScene>
class Page : public QGraphicsScene
{
Q_OBJECT
public:
Page(const QRectF& sceneRect, QObject* parent = 0);
~Page();
//需要重写 声明鼠标事件触发函数
void mousePressEvent(QGraphicsSceneMouseEvent* event);
void mouseMoveEvent(QGraphicsSceneMouseEvent* event);
};
然后在cpp中实现函数功能
在VS中编译后报error LNK2001: 无法解析的外部符号 “public: virtual int __cdecl TDRRGenerator::qt_metacall(enum QMetaObject::Call,int,void * *)” (?qt_metacall@TDRRGenerator@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)
原因是在头文件中加入了Q_OBJECT宏定义,此时缺少moc_***.cpp文件, 而VS不会自动编译该文件,需要手动使用qt安装bin目录下moc.exe进行编译。
命令如下:moc “page.h” -o “moc_page.cpp”