Ich habe eine benutzerdefinierte QGraphicsView und eine benutzerdefinierte QGraphicsItem. Ich möchte, dass das Element mit meinem Klick klickt, wenn ich in das Element klicke, ansonsten möchte ich, dass der Klick von der Ansicht gehandhabt wird.MousePressEvent in Ansicht und Elemente in Qt
Aber wenn ich auf das Element klicke, bearbeitet das Element den Klick. Das ist in Ordnung. Aber wenn ich irgendwo anders klicke, wird der Klick überhaupt nicht behandelt. Der gesamte Code in meinen Klassen, der etwas mit mouseEvents zu tun hat, ist unten.
class CustomView : public QGraphicsView
{
Q_OBJECT
public:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};
void CustomView::mousePressEvent(QGraphicsSceneMouseEvent *event){
cout << "pressing in view";
}
class CustomItem : public QGraphicsItem
{
public:
CustomItem(CustomView* widget)
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};
CustomItem::CustomItem(CustomView* widget){
setFlag(ItemIsSelectable);
setFlag(ItemIsMovable);
}
void CustomItem::mousePressEvent(QGraphicsSceneMouseEvent *event){
cout << "pressing in item";
}
Es scheint, dass, wenn ich die Funktion mouse von der CustomItem Klasse und Änderung der Custom die Funktion mouse zu entfernen:
void CustomView::mousePressEvent(QMouseEvent *event){
cout << "pressing in view";
}
die Custom kümmert sich um alle Mausevents.
Wie kann ich mit CustomItem die Klicks in den Elementen und mit CustomView alle anderen Klicks behandeln?
Vielen Dank.
class CustomView : public QGraphicsView
{
Q_OBJECT
public:
};
class CustomScene : public QGraphicsScene
{
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};
void CustomScene::mousePressEvent(QGraphicsSceneMouseEvent *event){
cout << "pressing in scene";
}
class CustomItem : public QGraphicsItem
{
public:
CustomItem(CustomView* widget)
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};
CustomItem::CustomItem(CustomView* widget){
setFlag(ItemIsSelectable);
setFlag(ItemIsMovable);
}
void CustomItem::mousePressEvent(QGraphicsSceneMouseEvent *event){
cout << "pressing in item";
}
A Klicken Sie in der Szene, aber von der Szene bekommen in einem Artikel behandelt nicht:
EDIT
So, jetzt habe ich es geändert. Aber Klicks in den Elementen werden nicht von den Elementen selbst gehandhabt, stattdessen werden sie von der Szene gehandhabt. Es sei denn, du klickst 2 mal richtig schnell auf die Items, es wird von der Szene und dem Item gehandhabt.
Irgendwelche Ideen?
versuchen zwingende 'QGraphicsScene :: mouse (QGraphicsSceneMouseEvent * mouseevent)' Methode in QGraphicsScene, statt QGraphicsView – Kunal
Ich denke, Ihre "CustomWidget :: mouse" soll "Custom :: mouse" (oder umgekehrt) sein. – Anthony
@Kunal Ty für Ihre Eingabe, ich habe die mousePressEvent in die Szene bewegt, aber ich habe immer noch ein Problem damit – fibera