Приветствия,

Я только начинаю изучать Qt, и мне интересно, возможно ли следующее. Я хотел бы создать приложение с двумя слоями GUI/Graphics. Верхний слой (назовем его A) будет расположен поверх нижнего слоя (назовем его B), и оба будут расположены поверх приложения. Если кнопка существует в одном и том же месте в обоих слоях, только кнопка в A должна быть видимой и реагировать на события щелчка. Кнопки на уровне B должны получать события щелчка только в том случае, если соответствующее местоположение на уровне A пусто. Я бы очень хотел, чтобы Qt справился с этим за меня. Какой самый простой способ сделать это?

Возможно, я атакую ​​проблему не с той стороны. Драйвером для этих вопросов является то, что я хочу сделать снимок экрана того, что присутствует в слое B (независимо от того, покрыто ли оно виджетом в слое A). Мне не нужны элементы из слоя А на этом снимке экрана, но они все равно должны присутствовать на экране. Я думал, что, разделив графический интерфейс на два слоя и отрисовав его в растровое изображение, я мог бы легко извлечь созданное Qt изображение нижнего слоя B. Возможно, есть более простой способ заставить Qt рисовать нужные мне элементы вне экрана. буфер?

Кстати, я не ищу здесь полного решения. Документация Qt превосходна, поэтому я просто надеюсь, что меня укажут в правильном направлении. Спасибо!

2
GrandAdmiral 15 Апр 2011 в 20:45

1 ответ

Похоже на работу для QGraphicsView. Это сделает именно то, что вы хотите.

1
Chris 27 Апр 2011 в 05:18
К сожалению, мне не удалось поработать над этой проблемой, но у моего коллеги есть решение. Насколько я понимаю, он использует функцию Render для отрисовки элементов слоя B в другой буфер. По сути, когда вызывается его функция, она сбрасывает видимый флаг для всех элементов, помеченных как часть слоя A, вызывает функцию Render, а затем восстанавливает видимые флаги. Мы думаем, что это сработает. Я предполагаю, что единственным беспокойством будут дополнительные события Redraw или если экран каким-то образом обновится в середине функции с элементами слоя A в неизвестных состояниях видимости.
 – 
GrandAdmiral
27 Апр 2011 в 17:10
Просто сделайте все ваши компоненты пользовательского интерфейса QGraphicsItem/QGraphicsWidgets и установите свойство z, инфраструктура графического представления позаботится об этом за вас.
 – 
Chris
1 Май 2011 в 21:05