QGraphicsView - Aufbau/Items verschieben/Signale
Verfasst: 14. Juni 2009 22:34
Hallo zusammen,
ich hab noch ein paar Grundlagen/Aufbau-Probleme und hoffe ihr könnt mir da weiter helfen :) (bin noch nicht sehr Qt versiert..)
Also prinzipiell will ich GraphicItems per Maus verschieben und an einem späterem Raster "andocken" können, also wenn das Item im 10px Bereich zum Raster ist, soll es in das Raster springen.
Dafür habe ich folgendes gemacht:
in der main eine Instanz meines EllipseItems der scene hinzugefügt,
in dem move-Event des EllipseItems (s.u.) soll das Signal itemMoved von mir ausgelöst werden und das wollte ich wiederum in der main dann später mit der Funktion zum "andocken" verbunden werden (provisorisch ist jetzt erstmal das quit drin)
mein ellipseitem
Soweit zum aktuellen Stand, jetzt zu meinem Problem :D
wenn ich jetzt versuche in der main das signal meines Ellipseitems zu verbinden, bekomme ich die Fehlermeldung, dass connect in diesem Gültigkeitsbereich nicht definiert wurde.
Muss ich die main jetzt irgendwie von QWidget erben lassen? oder ist der ganze Aufbau evtl schon Nachteilhaft?
Hoffe Ihr könnt mir was weiterhelfen
MfG Marc
ich hab noch ein paar Grundlagen/Aufbau-Probleme und hoffe ihr könnt mir da weiter helfen :) (bin noch nicht sehr Qt versiert..)
Also prinzipiell will ich GraphicItems per Maus verschieben und an einem späterem Raster "andocken" können, also wenn das Item im 10px Bereich zum Raster ist, soll es in das Raster springen.
Dafür habe ich folgendes gemacht:
in der main eine Instanz meines EllipseItems der scene hinzugefügt,
in dem move-Event des EllipseItems (s.u.) soll das Signal itemMoved von mir ausgelöst werden und das wollte ich wiederum in der main dann später mit der Funktion zum "andocken" verbunden werden (provisorisch ist jetzt erstmal das quit drin)
Code: Alles auswählen
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene scene;
scene.setSceneRect(-100.0 , -100.0 , 600.0,600.0);
MyQGraphicsEllipseItem *item = new MyQGraphicsEllipseItem(0, &scene);
item->setRect(-50.0,-50.0,100.0,100.0);
item->setFlag( QGraphicsItem::ItemIsMovable );
QGraphicsView view(&scene);
view.setRenderHint( QPainter::Antialiasing);
view.show();
//connect(item, SIGNAL(itemMoved()), a, SLOT(quit()));
return a.exec();
}
Code: Alles auswählen
#include <QGraphicsEllipseItem>
#include <QObject>
class MyQGraphicsEllipseItem : public QGraphicsEllipseItem
{
public:
MyQGraphicsEllipseItem(QGraphicsEllipseItem *parent, QGraphicsScene *scene) :
QGraphicsEllipseItem(parent, scene){}
protected:
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
signals:
void itemMoved();
};
#endif // MYQGRAPHICSELLIPSEITEM_H
Code: Alles auswählen
#include <QMouseEvent>
void MyQGraphicsEllipseItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
setCursor(Qt::OpenHandCursor);
QGraphicsEllipseItem::mouseMoveEvent(event);
emit itemMoved();
}
wenn ich jetzt versuche in der main das signal meines Ellipseitems zu verbinden, bekomme ich die Fehlermeldung, dass connect in diesem Gültigkeitsbereich nicht definiert wurde.
Muss ich die main jetzt irgendwie von QWidget erben lassen? oder ist der ganze Aufbau evtl schon Nachteilhaft?
Hoffe Ihr könnt mir was weiterhelfen
MfG Marc