У меня есть очень простой собственный класс, полученный из QGraphicsScene:
class SceneComponent : public QGraphicsScene
{
Q_OBJECT
public:
explicit SceneComponent(QObject* parent = 0);
protected:
void mousePressEvent(QGraphicsSceneMouseEvent*);
};
И mousePressEvent(QGraphicsSceneMouseEvent*)
определяется как:
void SceneComponent::mousePressEvent(QGraphicsSceneMouseEvent* event) {
Q_UNUSED(event);
std::cout<<"[Processing] MouseEvent"<<std::endl;
}
Для отображения этого QGraphicsView это так простокак:
QGraphicsView view(sceneComp);
view.show();
Теперь, когда я нажимаю на окно (для QGraphicsView), которое отображается, я получаю следующий вывод:
[Processing] MouseEvent
[Processing] MouseEvent
Однако, когда я отправляю синтетическийиспользование события:
QMouseEvent* mevent = new QMouseEvent(
QMouseEvent::MouseButtonPress, QPoint(50, 50),
Qt::LeftButton, Qt::NoButton, Qt::NoModifier
);
QApplication::sendEvent(&view, mevent);
Я не получаю абсолютно никакого вывода.Почему это так?
В соответствующей заметке установка eventFilter
на QGraphicsScene не дает никаких результатов.Вероятно, это (по моему мнению) из-за того факта, что QGraphicsScene ожидает QGraphicsSceneMouseEvent вместо QMouseEvent .Это поднимает два вопроса:
- Почему QGraphicsScene не принимает стандартный QEvent и только QGraphicsSceneEvent?
- Почему любой производный класс QGraphicsSceneEvent не может быть создан?
- Почему я могу отправлять события в QGraphicsScene, используя метод sceneEvent, но мне нужно указать конкретный QGraphicsItem для отправки события?