| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > "прозрачный" виджет |
| Автор: quarz 11.9.2010, 17:01 |
| Есть слайдер, за ним graphicsView, на котором нарисованы прямоугольники, как показано на первом скрине. GraphicsView немного шире, чем слайдер и там где прямоугольники вылезают за слайдер, они обрабатывают перемещение мыши и меняют указатель на pointing_hand (2 скрин). А слайдер, естественно, логически перекрывает нарисованные прямоугольники, хоть и графически прозрачен (3 скрин). Как сделать, чтобы он передавал движения и клики мыши своему родителю, graphicsView? Тогда можно было бы определить, есть ли в этом месте на graphicsView объект и если да, то обработать клики и перемещения мыши. А если нет, вернуть событие слайдеру, чтобы тот смог обрабатывать нажатия на ползунок. |
| Автор: RedDigger 24.9.2010, 22:53 | ||||
С примерами кода было бы удобнее, да и скринов я не заметил. Но всеже попытаюсь помочь. 1. Захват события нажатия кнопки мыши объектом слайдер. До начала основного алгоритма обработки слайдером передаете объект QEvent в слот обработки onClick() QGraphicsView. Будьте осторожны.. если вы используете локальные координаты на объекте то при передачи данных в другой объект может потребоваться конвертация координат на другие подобные... Данный вариант поможет Вам если вы используете QGraphicsView как основной обработчик событий. 2. В случае если нужно передать данные неопрделенной фигуре в облости QGraphicsView тогда Вам понадобится вытащить все объекты на QGraphicsView при помощи функции.
Данная конструкция Вам верет все объекты находящиеся под этими координатами. пробегаете по всем, запоминаете верхний и передаете ему QEvent... Также вместо пришедшего события можно генерировать собственные и передавать их.. Но лично я Вам не советую пользоваться подобной идеей постановки задачи.. Надеюсь помог. |