Russian Qt Forum
Ноябрь 01, 2024, 05:37
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Правильная маскировка кнопок сложной формы.
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Правильная маскировка кнопок сложной формы. (Прочитано 11611 раз)
Hrundel
Гость
Правильная маскировка кнопок сложной формы.
«
:
Ноябрь 11, 2012, 02:59 »
Всем привет, работаю над семестровым проектом. Основная цель проекта разработка GUI.
В качестве темы выбран 3D редактор.
Разработал дизайн по принципу ArtRange
у них выглядит так
у меня так же
Но вот в чем проблема. При over, на их кнопках, у них нет никаких косяков с масками.
кнопки лежат рядом друг с другом но не перекрывают друг друга альфа масками.
А у меня получается такая фигня, что если я попадаю мышью на альфа маску от другой кнопки в другом ряду, то начинает подсвечиваться не та кнопка на которой находится мышь, а та, в чей альфа канал она попала.
То есть вот так:
Если кто-то знает как решить такую проблему подскажите пожалуйста.
Записан
carrygun
Гость
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #1 :
Ноябрь 11, 2012, 08:41 »
Сделать маску не прямоугольную, а в форме кнопки.
Вообще расскажи подробнее как ты это делал.
Записан
mutineer
Гость
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #2 :
Ноябрь 11, 2012, 12:17 »
Еще стоит не разделять виджет на отдельные кнопки, и самому обрабатывать события мыши
Записан
Hrundel
Гость
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #3 :
Ноябрь 11, 2012, 14:27 »
Цитата: carrygun от Ноябрь 11, 2012, 08:41
Сделать маску не прямоугольную, а в форме кнопки.
Вообще расскажи подробнее как ты это делал.
Да маски и не прямоугольные совсем, иначе картинки бы перекрывали друг друга.
Цитата: mutineer от Ноябрь 11, 2012, 12:17
Еще стоит не разделять виджет на отдельные кнопки, и самому обрабатывать события мыши
mutineer
,
А вот это интересно, что значит не разделять виджет на отдельные кнопки? У меня они как раз отдельными кнопками выполнены. А как по другому? Укажи хотя бы направление
ты имеешь ввиду, что можно просто ловить координаты в виджете и обрабатывать клик по координатам и туда уже картинку показывать где клик или over был? правильно я понял?
Правда такие извращенные координаты будут очень сильно парить.
«
Последнее редактирование: Ноябрь 11, 2012, 14:55 от Hrundel
»
Записан
Bepec
Гость
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #4 :
Ноябрь 11, 2012, 15:02 »
Немного геометрии и... Не будут парить.
mutineer предлагает самому отрисовывать кнопки и реакцию на них в коде определять
Записан
Hrundel
Гость
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #5 :
Ноябрь 11, 2012, 17:27 »
Дык я вроде так и сделал:
создал класс на базе QLabel, переписал ему event, получилась кнопка
потом создал свое окно, дал ему флаг Qt::Widget чтобы оно типа панели висело.
Накидал в окно этих кнопок и реакцию на них конечно тоже переопределил,
или подразумевается что-то другое.
С геометрией конечно идея вроде очень даже не плохая. Но займет очень много времени. (по крайней мере у меня) А надо все быстро делать.
Есть ли способ быстрее и проще решить подобную проблему? Хотя, полагаю, что навряд ли.
Записан
Bepec
Гость
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #6 :
Ноябрь 11, 2012, 18:21 »
Самому - значит самому.
Берём виджет 1 штука. Берём переопределяем ему paintEvent. Отрисовываем кнопочки.
Далее ловим нажатия/наведения мыши. По формуле расчитываем куда тыкает мыша и производим необходимое действие. Как то подсветить или нажать.
Отдебажить. Оттестировать. Поставить на панель => Профит.
Записан
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #7 :
Ноябрь 11, 2012, 20:20 »
Я как то давно писал игрушку судоку (незакончил правда, надоело
), вот в ней как раз поле рисуется через paintEvent, и присутствует подсчет куда пользователь "тыкнул" мышкой в mouseReleaseEvent, и соответствующее на это действие, маштабирование поля игры тоже идет в рассчет
Может вам,
Hrundel
, это пригодится
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
Hrundel
Гость
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #8 :
Ноябрь 11, 2012, 22:46 »
gil9red,
огромное спасибо. Наверняка пригодиться. Приятно встретить отзывчивого человека.
Кстати, мне понравилось исполнение.
«
Последнее редактирование: Ноябрь 11, 2012, 23:20 от Hrundel
»
Записан
Hrundel
Гость
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #9 :
Ноябрь 11, 2012, 23:22 »
Спасибо, всем джедаям, гуру и самоварам
Смысл понял, остается только воплощать.
Bepec
, спасибо.
Записан
lighting
Гость
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #10 :
Ноябрь 12, 2012, 10:33 »
этот путь может быть не самым простым, если реализовывать кнопки полностью, как-то смена фокуса нажатием Tab, стили, hover и т.п. события. На этом форуме была темка, разрабатывался свой виджет наподобие файерфоксовского обновления плагинов, а на хабре после была выложена статья с обсуждением этого виджета, там в комментариях эти вещи подробно рассматривали.
Хотя если требования не очень жесткие, то это возможно самый удобный и простой вариант.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #11 :
Ноябрь 12, 2012, 12:36 »
Виджет заточен на прямоугольник, поэтому если "по кругу", то каждая кнопка виджет - больше неудобств чем выгоды. Рисовать да, можно прямоугольники, маска-сектор. Определить клик на сектор - ну десяток строк кода,
Пантер
недавно пыхтел
Не пойму почему геометрия 6-7 класса средней школы вызывает такую панику "ах, это займет очень много времени"
Записан
Hrundel
Гость
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #12 :
Ноябрь 12, 2012, 13:14 »
А может еще проще сделать. Ловить на event альфа-маску, если поймал передавать event тому кто снизу.
Правда я пока не знаю будет ли оправдано использовать такие функции ради тупых кнопок.
Igors,
с геометрией-то конечно все в порядке, уже почти дописал, но лично у меня всегда такой лом сочинять математические алгоритмы.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #13 :
Ноябрь 12, 2012, 13:26 »
Цитата: Hrundel от Ноябрь 12, 2012, 13:14
А может еще проще сделать. Ловить на event альфа-маску, если поймал передавать event тому кто снизу.
А как Вы узнаете кто/какой снизу?
Цитата: Hrundel от Ноябрь 12, 2012, 13:14
..с геометрией-то конечно все в порядке,
Ну тогда хорошо (а то я хотел уж Вам пример кода набросать
)
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Правильная маскировка кнопок сложной формы.
«
Ответ #14 :
Ноябрь 12, 2012, 14:01 »
Цитата: Hrundel от Ноябрь 12, 2012, 13:14
Igors,
с геометрией-то конечно все в порядке, уже почти дописал, но лично у меня всегда такой лом сочинять математические алгоритмы.
Коли с геометрией всё в порядке, почему нельзя задействовать QGraphicsPathItem или QGraphicsPolygonItem
Записан
Qt 5.11/4.8.7 (X11/Win)
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...