LINUX.ORG.RU

Свой QTabWidget на C++. Неохота каждую кнопку оформлять как отдельный виджет. Что делать?


0

1

Хочу сделать виджет, похожий на QTabWidget, но анимированный и видоизменённый, похожий на сей виджет в google chrome.

Задача - определить, какой элемент захватила и тащит мышь. Неохота каждый элемент оформлять в виде отдельного виджета, т.к. тогда при их создании-удалении нужно будет их ещё connect/disconnect, будут всякие там слоты-сигналы, как-то «много проводов» получается для не очень сложного виджета, много сущностей. Плюс получается ограничение на прямоугольность формы. Хотя может быть Qt умеет детектировать попадание в виджеты с хитрой формой так, чтобы граница между ними была диагональной под 45 градусов - незнаю...

Хочется как-то проще, типа виджет один, без подвиджетов, все события мыши принадлежат ему, он самостоятельно рисует все элементы (табы), хранит их координаты, детектирует попадание в них. Без лишних вызовов сотен нефти слотов-сигналов.

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

сразу скажу, хоть на куте написал 0,0001 приложение, с одним виджетом вместо многих можно только лососнуть. пытаться сэкономить на композитных сущностях это только наука на будущее, но ты попробуй, ок

trashymichael ★★★
()

Хитрые контуры можно сохранить в QPainterPath, у которого есть метод contains(). Хотя проверку попадания мыши в примитивный контур со срезам под 45 градусов, вполне можно самому с помощью пары условий определять, не вижу никаких проблем. Определяешь индекс таба, посылаешь сигнал об этом кому надо, профит. Больше времени потратишь на отрисовку красивых табов (аля хром) и их анимацию.

Amp ★★★
()

один виджет без подвиджетов? мегакласс на сто тысяч строк? Разделяй и властвуй

a вообще лучше на qml писать. Digia его активно пилит, а не QWidgets

Vernat ★★
()
Ответ на: комментарий от Vernat

a вообще лучше на qml писать. Digia его активно пилит, а не QWidgets

Пилила бы Digia его активно - они давно уже Desktop Components втащили бы в Qt. Хотя бы в 5.0. Пока же складывается впечатление, что они пытаются убедить разработчиков, что это модно, современно и удобно.

Amp ★★★
()
Ответ на: комментарий от Vernat

В том и дело, что не сто тыщ. Получается сильно меньше.

kiverattes ★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.