Russian Qt Forum
Сентябрь 30, 2024, 20:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [4.3.3] QEvent::GraphicsSceneMouseRelease on top item  (Прочитано 3282 раз)
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
« Последнее редактирование: Январь 10, 2008, 11:11 от QCasper » Записан
QCasper
Гость
« Ответ #1 : Январь 15, 2008, 09:43 »

Все еще актуально...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 20.