picking in graphicsscene
Verfasst: 29. Mai 2010 20:22
ich schreibe gerade an einem programm mit einer graphicsscene. in dieser graphicsscene wird ein graph angezeigt, der sich aus mehreren qpainterpaths zusammensetzt.
was ich nun gerne tun würde:
bei mouse-click auf einen qpainterpath herausfinden, über welchem qpainterpath die maus sich gerade befindet. (ich würde die qpainterpath klasse erweitern um ein attribut "qstring name" und so könnte ich dann den namen des qpainterpath auslesen)
ich hab mir das ganze so vorgestellt:
bei mouseclick lese ich die graphicsscene-position des zeigers aus (schon implementiert). diese position füttere ich an die itemAt() funktion, die mir dann das oberste item an dieser stelle zurückliefert.
woran es im moment scheitert, ist das casten item > painterpath.
kann mir jemand sagen, was ich falsch mache? oder bin ich mit dieser herangehensweise überhaupt am holzweg? aber wie sonst soll ich das picking in der graphicsscene implementieren?
was ich nun gerne tun würde:
bei mouse-click auf einen qpainterpath herausfinden, über welchem qpainterpath die maus sich gerade befindet. (ich würde die qpainterpath klasse erweitern um ein attribut "qstring name" und so könnte ich dann den namen des qpainterpath auslesen)
ich hab mir das ganze so vorgestellt:
bei mouseclick lese ich die graphicsscene-position des zeigers aus (schon implementiert). diese position füttere ich an die itemAt() funktion, die mir dann das oberste item an dieser stelle zurückliefert.
woran es im moment scheitert, ist das casten item > painterpath.
kann mir jemand sagen, was ich falsch mache? oder bin ich mit dieser herangehensweise überhaupt am holzweg? aber wie sonst soll ich das picking in der graphicsscene implementieren?
Code: Alles auswählen
void GraphicsScene::mousePressEvent( QGraphicsSceneMouseEvent * mouseEvent )
{
QTransform trans;
//QGraphicsItem *item = itemAt(mouseEvent->scenePos(), trans);
//QPainterPath path = QPainterPath qgraphicsitem_cast( item );
QPainterPath *item = dynamic_cast<QPainterPath *>(itemAt(mouseEvent->scenePos(), trans));
if(item != 0)
emit mousePos(item->name);
}