Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ MouseMoveEvent

Автор: quarz 8.7.2010, 17:59

есть главное окно

class MyProgram : public QMainWindow
на которое с помощью дизайнера вставлен QGraphicsView.
Мне надо ловить события мыши и колеса прокрутки, для перемещения графики по сцене.

Делаю это так:
void MyProgram::mousePressEvent (QMouseEvent *event){}
void MyProgram::mouseReleaseEvent (QMouseEvent *event){}
void MyProgram::mouseMoveEvent(QMouseEvent *event){}
void MyProgram::wheelEvent(QWheelEvent *event){}


Если кликнуть мышью по форме (не по GraphicsView), то все события срабатывают.
А если кликнуть над GraphicsView и потаскать мышь с зажатой кнопкой, то MousePress сработает, а MouseMove - нет.
Почему?
Как будто GraphicsView не передает событие родителю, но почему тогда MousePress срабатывает?
Что-то я в этих событиях еще не разобрался...

Автор: Litkevich Yuriy 8.7.2010, 18:30

Цитата(quarz @ 8.7.2010, 21:59) *
Как будто GraphicsView не передает событие родителю
собственно это штатное поведение, если обработчик события у виджета есть, то он его и принял, дальше оно пойдёт только в случае если обработчик события выставит флаг "ignore".
для того чтобы ловить чужое событие нужно ставить "фильтр событий", смотри QObject::installEventFilter(), там приведён пример как это делать.


П.С. а вообще каркас графического представления уже имеет реализацию перетаскивания элементов, нужно только элементу соответствующий флаг установить

Автор: quarz 8.7.2010, 23:23

Спасибо, Юрий!
Действительно, в графическое представление встроен функционал для перетаскивания. За это отвечает флаг QGraphicsItem::ItemIsMovable

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)