[我正在尝试使用mouseEvent
中的QGraphicsScene
函数绘制一条线,当我按下鼠标按钮并移至场景上方时,该线应从左上角[0,0]开始开始在我按下鼠标按钮的那一点,但是当我松开鼠标并再次这样做时,通常会画线,请问出现这种现象的原因是什么以及如何解决?
这里是完整的代码:
Scene.h:
#ifndef SCENE_H
#define SCENE_H
#include <QGraphicsScene>
#include <QGraphicsLineItem>
#include <QGraphicsSceneMouseEvent>
class Scene : public QGraphicsScene
{
public:
Scene();
private:
QGraphicsLineItem* line;
QPointF startPoint;
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
};
#endif // SCENE_H
Scene.cpp:
#include "Scene.h"
Scene::Scene() : startPoint(0,0)
{
line = new QGraphicsLineItem();
this->addItem(line);
}
void Scene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
startPoint = event->scenePos();
}
void Scene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
qreal x = event->scenePos().x();
qreal y = event->scenePos().y();
line->setLine(startPoint.x(),startPoint.y(),x,y);
}
Main:
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include "Scene.h"
int main(int argc,char* argv[])
{
QApplication app(argc,argv);
Scene scene;
QGraphicsView view(&scene);
view.setMinimumSize(800,600);
view.setAlignment(Qt::AlignLeft|Qt::AlignTop);
view.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
view.show();
return app.exec();
}
问题很简单:当您按下鼠标时,您不会更新鼠标线。
void Scene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
QLineF l(event->scenePos(), event->scenePos());
line->setLine(l);
}
void Scene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
QLineF l = line->line();
l.setP2(event->scenePos());
line->setLine(l);
}