Flags trennen?

Alles rund um die Programmierung mit Qt
Antworten
konvex
Beiträge: 35
Registriert: 8. November 2008 17:58

Flags trennen?

Beitrag 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?!)
}
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Flags trennen?

Beitrag 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?
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
konvex
Beiträge: 35
Registriert: 8. November 2008 17:58

Beitrag 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?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Das Einzige was mir einfällt wäre, selectionChanged Signal auswerten und die Flags aller Items anpassen.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
konvex
Beiträge: 35
Registriert: 8. November 2008 17:58

Beitrag 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?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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?
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Antworten