Ich erstelle eine Schaltplanbearbeitung, bei der der Benutzer einfach Linien und Rechtecke zeichnen kann. Dazu verwende ich eine untergeordnete QGraphicsView mit neu implementierten Event-Handlern. Jetzt, wenn Linien gezeichnet werden, verschiebt sich die Ansicht, um den Mittelpunkt aller gezeichneten Linien in der Mitte des Anwendungsfensters zusammen zu setzen (ich denke?). Das ist in einem Zeichenprogramm sehr nervig, wie kann ich das beheben?Sperransicht in 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();
}
Manchmal so einfach! Vielen Dank! – pschulz