Автор: 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