Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > "прозрачный" виджет


Автор: quarz 11.9.2010, 17:01
Есть слайдер, за ним graphicsView, на котором нарисованы прямоугольники, как показано на первом скрине. 
GraphicsView немного шире, чем слайдер и там где прямоугольники вылезают за слайдер, они обрабатывают перемещение мыши и меняют указатель на pointing_hand (2 скрин). А слайдер, естественно, логически перекрывает нарисованные прямоугольники, хоть и графически прозрачен (3 скрин). 
Как сделать, чтобы он передавал движения и клики мыши своему родителю, graphicsView?
Тогда можно было бы определить, есть ли в этом месте на graphicsView объект и если да, то обработать клики и перемещения мыши. А если нет, вернуть событие слайдеру, чтобы тот смог обрабатывать нажатия на ползунок.

Автор: RedDigger 24.9.2010, 22:53
Цитата(quarz @ 11.9.2010,  17:01)
Как сделать, чтобы он передавал движения и клики мыши своему родителю, graphicsView?
Тогда можно было бы определить, есть ли в этом месте на graphicsView объект и если да, то обработать клики и перемещения мыши. А если нет, вернуть событие слайдеру, чтобы тот смог обрабатывать нажатия на ползунок.

С примерами кода было бы удобнее, да и скринов я не заметил. Но всеже попытаюсь помочь.

1. Захват события нажатия кнопки мыши объектом слайдер. До начала основного алгоритма обработки слайдером передаете объект QEvent в слот обработки onClick() QGraphicsView. Будьте осторожны.. если вы используете локальные координаты на объекте то при передачи данных в другой объект может потребоваться конвертация координат на другие подобные... 
Данный вариант поможет Вам если вы используете QGraphicsView как основной обработчик событий. 

2. В случае если нужно передать данные неопрделенной фигуре в облости QGraphicsView тогда Вам понадобится вытащить все объекты на QGraphicsView при помощи функции.
Код

QList<QGraphicsItem *>    QGraphicsView::items ( int x, int y ) const

Данная конструкция Вам верет все объекты находящиеся под этими координатами. пробегаете по всем, запоминаете верхний и передаете ему QEvent...

Также вместо пришедшего события можно генерировать собственные и передавать их.. 

Но лично я Вам не советую пользоваться подобной идеей постановки задачи..

Надеюсь помог.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)