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

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

Форум на CrossPlatform.RU _ Qt GUI _ Прозрачнойсть вокруг виджетов необычной формы

Автор: edwardoid 29.9.2010, 8:55

идея проста нужно нарисовать нечто такое:
http://img826.imageshack.us/i/samplez.png/

Где черная зона должна быть прозрачной, зеленые прямоугольники - кнопки или любой другой виджет.
Проблема в том, что элементы находятся в этих окружностях и если пользователь кликает вне этих окружностей, окружности со своим содержимым должны пропасть(стать невидимыми), т.е. только если пользователь кликнул внутри окружностей (в общем случае любая другая ограниченная площадь).

Автор: Алексей1153 29.9.2010, 9:02

QRegion в помощь

заливаешь окно чёрным, рисуешь круги (по заранее созданным для них регионам), там же размещаешь кнопки. При клике по окну проверяешь, лежит ли точка в регионе или нет - дальше по логике :)

Автор: edwardoid 29.9.2010, 9:09

Цитата(Алексей1153 @ 29.9.2010, 11:02) *
QRegion в помощь

заливаешь окно чёрным, рисуешь круги (по заранее созданным для них регионам), там же размещаешь кнопки. При клике по окну проверяешь, лежит ли точка в регионе или нет - дальше по логике :)

Мне нужно чтобы черная зона была прозрачной! плюс круги(пример) в моем случае это круг и растягивающийся прямоугольник с динамичным изменением виджетов в нем(прямоугольнике), плюс на каждый виджет будет стоять свой style


Нужно нечто вроде меню в Windows 7 , но чтоб кнопка Start была круглой

Автор: Алексей1153 29.9.2010, 9:16

edwardoid, посмотри тогда эту тему http://www.forum.crossplatform.ru/index.php?showtopic=5533

я там делал как раз такую фигню. Только у меня поверх ложились PNG , а тебе нужно с регионами закраску в нужном месте делать

Цитата(edwardoid @ 29.9.2010, 12:09) *
Нужно нечто вроде меню в Windows 7 , но чтоб кнопка Start была круглой

- это мне ничего не говорит ))

Автор: edwardoid 29.9.2010, 9:17

У меня тоже пнг и виджеты будут там, где закрашено непрозрачной частью пнг

Автор: Алексей1153 29.9.2010, 9:19

в твоём случае PNG как бы и не требуется, разве что хочешь фон нарисовать картиночный

Автор: edwardoid 29.9.2010, 9:21

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


Пример Каспера пашет, только как убрать виджет, когда кликнули по пустому месту?

Автор: Алексей1153 29.9.2010, 9:24

Кстати, с регионами таки универсальнее будет - а для фона так же сможешь регионом обрезать PNG потом и подложить

Автор: edwardoid 29.9.2010, 9:31

Не понял. Как понять "подрезать"? У меня динамически удлиняется прямоугольник.

http://img52.imageshack.us/i/samplefw.jpg/
Вот полная структура результата.

Автор: Алексей1153 29.9.2010, 9:44

вот так

Цитата
void QPainter::setClipRegion ( const QRegion & region, Qt::ClipOperation operation = Qt::ReplaceClip )
Sets the clip region to the given region using the specified clip operation. The default clip operation is to replace the current clip region.

Note that the clip region is given in logical coordinates.

See also clipRegion(), setClipRect(), and Clipping.

и хочь там что динамическое :) Правда, сам это под Qt не пробовал (ищу аналогию с WinAPI). Заодно и расскажешь ))

А зачем определять "на какой суб-виджет попал", пусть контролы сами обрабатывают клики

Автор: Litkevich Yuriy 29.9.2010, 10:00

Цитата(edwardoid @ 29.9.2010, 13:31) *
Вот полная структура результата.
Эдвард, я думаю тут прозрачность не нужна. Нужно просто создавать (отображать) прямоугольный виджет поверх, а когда пользователь щёлкает в кружок, то прямоугольный виджет скрывать (close)

Автор: edwardoid 29.9.2010, 10:07

Цитата(Litkevich Yuriy @ 29.9.2010, 12:00) *
Цитата(edwardoid @ 29.9.2010, 13:31) *
Вот полная структура результата.
Эдвард, я думаю тут прозрачность не нужна. Нужно просто создавать (отображать) прямоугольный виджет поверх, а когда пользователь щёлкает в кружок, то прямоугольный виджет скрывать (close)

Не совсем, это же меню, т.е. если кликнуть рядом с прямоугольником, его опять же надо скрыть Любой клик на белой поверхности, должно скрыть все, что закрашено желто-оранжевым

Автор: ufna 29.9.2010, 10:17

Ну я http://ufna.ru/wp-content/uploads/2010/09/DriverGuide.jpg сделал именно двумя виджетами. Меню пропадает при клике "куда угодно", то же самое можно сделать и для основного виджета - проще всего делай его потомком QMenu, либо аккуратно обрабатывай соотвествующие события.

Автор: Litkevich Yuriy 29.9.2010, 13:29

Цитата(edwardoid @ 29.9.2010, 14:07) *
Не совсем, это же меню
дак тебе лучше сделать наследника от QMenu, в нём же уже реализован функционал сокрытия при потери фокуса.

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