Keine Events in abgeleiteten Klassen.
Verfasst: 30. Juni 2008 15:39
Ich habe ein GraphicsView abgeleitet:
Die Events sind alle nach dem Shema implementiert:
In diesem GView stelle ich ganz normal eine abgeleitete Scene dar, welche ich im Konstruktor erstelle.
und die Elemente dieser Scene sind dann abgeleitete GraphicsItems:
Die Eventfunktionen sind alle so implementiert:
in der Scene ebenfalls:
Laut Qt Doku müsste ich dann doch Events bekommen, wenn ich mit der Maus über so einem Item bin. Allerdings scheint das bei diesem Beispiel nicht zu funktionieren und bei einer anderen Klasse nur bei Mausklicks. Ich verstehe nicht warum ich keine Ausgabe erhalte.
Die Events reichen nur bis zum GraphicsView und der Scene, alles was danach kommt ist irgendwie merkwürdig...
Code: Alles auswählen
class GraphWidget : public QGraphicsView
{
Q_OBJECT
public:
GraphWidget();
// ... usw
protected:
void resizeEvent(QResizeEvent *event);
void mouseMoveEvent ( QMouseEvent * event );
void mousePressEvent ( QMouseEvent * event );
void mouseReleaseEvent ( QMouseEvent * event );
void drawForeground ( QPainter * painter, const QRectF & rect );
Code: Alles auswählen
void GraphWidget::mouseReleaseEvent ( QMouseEvent * event )
{
std::cout<<"GraphWidget - mouseReleaseEvent = "<<event->pos().x()<<"; "<<event->pos().y()<<std::endl;
if(measureP1 == true)
measureP2 = true;
if(measure == false && measureP1 == true && measureP2 == true)
distance = calcDistance(PtScMouse1, PtScMouse2);
if(visibility == true) {
visibility = false;
drawVisArrow = false;
}
QGraphicsView::mouseReleaseEvent(event);
}und die Elemente dieser Scene sind dann abgeleitete GraphicsItems:
Code: Alles auswählen
class BFItem : public QGraphicsItem
{
public:
BFItem(Model *mod, double *zoom_verhaeltnis);
//...
protected:
void mousePressEvent ( QGraphicsSceneMouseEvent * event );
void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event );
void mouseMoveEvent ( QGraphicsSceneMouseEvent * event );
};
Code: Alles auswählen
void BFItem::mousePressEvent ( QGraphicsSceneMouseEvent * event )
{
std::cout<<"BFItem - mousePressEvent = "<<event->pos().x()<<"; "<<event->pos().y()<<std::endl;
mouseDown = event->scenePos();
mouseDown /= *pixels_per_inch;
update();
QGraphicsItem::mousePressEvent(event);
}Code: Alles auswählen
void GraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
// std::cout<<"Scene - mouseMoveEvent-event"<<std::endl;
mousePos = event->scenePos();
update();
QGraphicsScene::mouseMoveEvent(event);
}Die Events reichen nur bis zum GraphicsView und der Scene, alles was danach kommt ist irgendwie merkwürdig...