GraphicsView Rechtecke verschieben
Verfasst: 13. März 2015 21:30
Hallo,
habe folgenden Code, der dazu dient, Rechtecke zu verschieben.
Allerdings haut da was nicht hin, wenn ich item1 verschiebe, dann
verschiebt sich item2 oder auch andersherum.
Woran kann das liegen?
Danke für Codesnippets und Sachdienliche Hinweise
habe folgenden Code, der dazu dient, Rechtecke zu verschieben.
Allerdings haut da was nicht hin, wenn ich item1 verschiebe, dann
verschiebt sich item2 oder auch andersherum.
Woran kann das liegen?
Danke für Codesnippets und Sachdienliche Hinweise
Code: Alles auswählen
#include <QtGui>
#include <QGraphicsItem>
#include <QGraphicsProxyWidget>
#include "designergraphicsview.h"
DesignerGraphicsView::DesignerGraphicsView(QWidget *parent) :
QGraphicsView(parent)
{
scene = new QGraphicsScene(this);
this->setScene(scene);
this->setGeometry(0,0,800,600);
drag_item = nullptr;
item1 = new DesignerItem;
item2 = new DesignerItem;
item1->setGeometry(4,4,100,100);
item1->signal_mouse_press.connect(
boost::bind(
&DesignerGraphicsView::OnMousePress,
this,_1)
);
item2->setGeometry(54,54,100,100);
item2->signal_mouse_press.connect(
boost::bind(
&DesignerGraphicsView::OnMousePress,
this,_1)
);
resizer = new QGraphicsRectItem;
resizer->setRect(0,0, 106,106);
resizer->setPen(QPen(Qt::red));
resizer->setBrush(Qt::yellow);
resizer->hide();
scene->addItem(resizer);
proxy1 = scene->addWidget(item1);
proxy1->setPos(4,4);
proxy1->setFlag(QGraphicsItem::ItemIsMovable,true);
item_objects[item1] = proxy1;
proxy2 = scene->addWidget(item2);
proxy2->setPos(34,34);
proxy2->setFlag(QGraphicsItem::ItemIsMovable,false);
item_objects[item2] = proxy2;
}
void DesignerGraphicsView::OnMousePress(DesignerItem *item)
{
assert(item);
drag_item = item;
resizer->show();
if (drag_item == item1) {
proxy1->setFlag(QGraphicsItem::ItemIsMovable,true);
proxy2->setFlag(QGraphicsItem::ItemIsMovable,false);
}
else if (item == item2) {
proxy1->setFlag(QGraphicsItem::ItemIsMovable,false);
proxy2->setFlag(QGraphicsItem::ItemIsMovable,true);
}
}
void DesignerGraphicsView::mouseMoveEvent(QMouseEvent *event)
{
if (drag_item) {
QPointF p = this->mapToScene(event->pos());
item_objects[drag_item]->setPos(p-
drag_item->m_pos);
QPointF p2 = p;
p2.setX(p2.x()-qreal(4.0));
p2.setY(p2.y()-qreal(4.0));
resizer->setPos(p2-drag_item->m_pos);
}
}
void DesignerGraphicsView::mouseReleaseEvent(QMouseEvent *event)
{
drag_item = nullptr;
}
#ifndef DESIGNERGRAPHICSVIEW_H
#define DESIGNERGRAPHICSVIEW_H
#include <QWidget>
#include <QGraphicsView>
#include "designeritem.h"
class DesignerGraphicsView : public QGraphicsView
{
Q_OBJECT
public:
explicit DesignerGraphicsView(QWidget *parent = 0);
signals:
public slots:
protected:
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
private:
QGraphicsScene *scene;
DesignerItem *drag_item;
QGraphicsRectItem *resizer;
QGraphicsProxyWidget *proxy1;
QGraphicsProxyWidget *proxy2;
DesignerItem *item1;
DesignerItem *item2;
std::map<DesignerItem*, QGraphicsProxyWidget*> item_objects;
void OnMousePress(DesignerItem *item);
};
#endif // DESIGNERGRAPHICSVIEW_H