Имеется такой код:
ViewDlg::ViewDlg(QWidget *parent):QDialog(parent) {
QGraphicsView *view = new QGraphicsView(this);
QGraphicsScene *scene = new QGraphicsScene(QRectF(0.0, 0.0, 100.0, 100.0), this);
view->setScene(scene);
QGraphicsItem *first = scene->addRect(QRectF(10.0, 10.0, 80.0, 80.0));
QGraphicsItem *second = scene->addRect(QRectF(30.0, 30.0, 40.0, 40.0));
Filter *filter = new Filter(this);
scene->addItem(filter);
second->installSceneEventFilter(filter);
QVBoxLayout *lt = new QVBoxLayout(this);
lt->addWidget(view);
}
Создаётся сцена и туда добавляется пара рект итемов. На второй рект итем устанавливается следующий фильтр:
bool Filter::sceneEventFilter(QGraphicsItem *watched, QEvent *event) {
if (event->type() == QEvent::GraphicsSceneMousePress)
qDebug("mouse press event");
if (event->type() == QEvent::GraphicsSceneMouseRelease)
qDebug("mouse release event");
return QGraphicsItem::sceneEventFilter(watched, event);
}
Вопрос заключается в следующем: почему я не вижу строки "mouse release event", как бы я не долбал мышью по второму прямоугольнику (строка "mouse press event" исправно отображается)? То есть событие освобождения мыши просто не приходит.
При этом замечу, что если установить фильтр первому прямоугольнику, то оба события приходят, и соответственно печатаются обе строки.
Компилябельные исходники здесь:
http://www.creobyte.com/tools/releaseevent.zip