Seite 1 von 1

Flags trennen?

Verfasst: 19. November 2008 12:52
von konvex
Hallo,
Ich hab ein Item in einer GraphicsScene erstellt und will es nun bewegen (ItemIsMovable), aber falls es ausgewählt ist (ItemIsSelected) will ich dass es sich nicht bewegt.
Kann ich das irgendwie trennen, weil sobald ich es selected ist bewegt es sich bei mir auch...
zb. if(isSelected)
{
//ItemIsNotMovable(aber solch eine Fkt gibt es ja nicht?!)
}

Re: Flags trennen?

Verfasst: 19. November 2008 12:55
von macman
konvex hat geschrieben:Ich hab ein Item in einer GraphicsScene erstellt und will es nun bewegen (ItemIsMovable), aber falls es ausgewählt ist (ItemIsSelected) will ich dass es sich nicht bewegt.
Das widerspricht sich etwas oder findest Du nicht? Wie willst Du es denn bewegen, ohne es zu selektieren?

Verfasst: 19. November 2008 13:00
von konvex
Also, ich habe meine Scene(hier wird nich die Fkt isSelected benutzt ):

Code: Alles auswählen

void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *e)
{
pos=e->scenePos();
...
EllipseItem *item = new EllipseItem(pos.x()-5, pos.y()-5,10,10);
item->setFlag(QGraphicsItem::ItemIsMovable); 
addItem(item);
}
und mein Item(hier benutze ich das):

Code: Alles auswählen

void EllipseItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{
posi = e->scenePos();
setFlags(QGraphicsItem::ItemIsSelectable);
setRect(posi.x()-5, posi.y()-5, 10, 10);

endi=e->scenePos();
}

void EllipseItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *e)
{
endi=e->scenePos();
if(isSelected())
{
LineItem *linie = new LineItem(posi.x(), posi.y(), endi.x(), endi.y());
scene()->addItem(linie);
}
...
}
Kann ich das nicht trennen?

Verfasst: 19. November 2008 13:29
von macman
Das Einzige was mir einfällt wäre, selectionChanged Signal auswerten und die Flags aller Items anpassen.

Verfasst: 19. November 2008 15:04
von konvex
Also ich hab jetzt mal das probiert:

graphicsscene.cpp

Code: Alles auswählen

void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *e)
{
pos=e->scenePos();

EllipseItem *item = new EllipseItem(pos.x()-5, pos.y()-5,10,10);
item->setFlag(QGraphicsItem::ItemIsSelectable);
addItem(item);

if(item->isSelected())
{ item->setFlag(QGraphicsItem::ItemIsMovable, false); }
else
{ item->setFlag(QGraphicsItem::ItemIsMovable, true); }
} 
Aber es scheint dass item->setFlag(QGraphicsItem::ItemIsMovable,false);
einfach von der scene ignoriert wird...
Was ist denn daran falsch?

Verfasst: 19. November 2008 15:14
von macman
Keine Ahnung was Du da machst, bzw. was das ergeben soll. Zu sehen ist jedoch das Du ein neues Item erstellst und sofort danach prüfst, ob es selektiert ist. Wer soll es denn bitteschön selektiert haben?