【发布时间】:2017-11-16 22:21:14
【问题描述】:
我正在创建一个原理图编辑,简单地说,用户可以在其中绘制线条和矩形。为此,我使用带有重新实现的事件处理程序的子类 QGraphicsView。 现在,当绘制线条时,视图会发生变化,以便将所有绘制线条的中心点放在应用程序窗口的中间(我猜?)。这在绘图程序中非常烦人,我该如何解决?
MWE:
#include <QApplication>
#include <QMainWindow>
#include <QGraphicsView>
#include <QMouseEvent>
class view : public QGraphicsView
{
public:
view(QGraphicsScene* scene, QWidget* parent = 0) : QGraphicsView::QGraphicsView(scene, parent) { }
void mousePressEvent(QMouseEvent* event)
{
static QPointF p;
static bool active = false;
if(!active)
{
p = mapToScene(event->pos());
active = true;
}
else
{
QPointF p2 = mapToScene(event->pos());
active = false;
draw_line(p, p2);
}
}
void draw_line(QPointF p1, QPointF p2)
{
QPen pen;
pen.setWidth(2);
this->scene()->addLine(p1.x(), p1.y(), p2.x(), p2.y(), pen);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow w;
QGraphicsScene* scene = new QGraphicsScene;
view* mview = new view(scene);
w.setCentralWidget(mview);
w.show();
return a.exec();
}
【问题讨论】:
标签: c++ qt qt5 qgraphicsview qgraphicsscene