Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: QCasper от Январь 09, 2008, 15:03



Название: [4.3.3] QEvent::GraphicsSceneMouseRelease on top item
Отправлено: QCasper от Январь 09, 2008, 15:03
Имеется такой код:

Код:
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


Название: Re: [4.3.3] QEvent::GraphicsSceneMouseRelease on top item
Отправлено: QCasper от Январь 15, 2008, 09:43
Все еще актуально...