Russian Qt Forum

Qt => QSS => Тема начата: boruh от Июль 26, 2009, 20:19



Название: QStyleSheet для QToolButton с иконками [РЕШЕНО]
Отправлено: boruh от Июль 26, 2009, 20:19
Всем добрый вечер.
Задача банальна до ужаса (в том смысле, что возникает она у доброй половины программистов GUI, если не у всех 100%), однако быстрого решения "с наскока" получить не удалось.
В чем задача: нужно сделать кнопку, простую кнопку типа QToolButton, отображающую различные иконки для случаев просто кнопка/наведена мышь/нажата. В моем случае это flat-кнопки, у которых в "состоянии покоя" нет рамки и картинка на ней рисуется монохромная. При наведении мыши появляется рамка и картинка "расцвечивается" (т.е. та же картинка, что и в простом состоянии, только не монохромная, а цветная). При нажатии происходит вдавливание кнопки, картинка используется такая же, что и при наведении.
Первое, что пришло на ум - это QStyleSheets. Работаю на Qt 4.5.2. Провозился несколько часов изучая доки и эксперементируя со StyleSheet для кнопки, но желаемого результата так и не добился. Кто-нибудь может помочь?
Я столкнулся со следующими проблемами:
1. Рамка
Для помещения иконки на кнопке в документации велят использовать свойство border-image (а не background-image). Этому посвящен целый подраздел под названием "Common mistakes", в котором как раз и пишут про стилизацию кнопок картинками. Однако используя свойство border-image не получается одновременно задать кнопке просто рамку! Можно конечно рисовать рамку на самой текстуре кнопки, но может быть есть иные варианты?  ???
2. Так же есть некоторое недопонимание механизма растягивания "текстуры" на кнопке (описанного все в том же разделе "Common mistakes", подраздел "QPushButton and images"). Методом научного тыка я кое-как получил желаемый результат, но хотелось бы понимать этот механизм, а не действовать вслепую.

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

Если вопрос визуализации решается только дизайнером и картинками (т.е. рисуется не иконка для кнопки, а цельная кнопка с фоном, рамкой и т.д.) - то значит будем делать так, не проблема. Просто мне хочется узнать, может быть есть какие-то стандартные выработанные пути по решению данной задачи.


Название: Re: QStyleSheet для QToolButton с иконками
Отправлено: Rcus от Июль 26, 2009, 20:54
/* здесь был абзац о едином стиле графической оболочки и культе единого стиле в мире иксов */\

Хм, а почему не хватает того что реализует QToolButton? Там вроде есть все что нужно: отображение рамки, иконки для разных состояних и отрисовка при нажатии.

/* а здесь было замечание о несовершенстве qss и непригодности его для серьезных приложений, paintEvent, style()->drawPrimitivee рулят */


Название: Re: QStyleSheet для QToolButton с иконками
Отправлено: boruh от Июль 27, 2009, 08:17
О-па. Представьте себе - а я и не знал, что в версии 4.5.2 была расширена функциональность класса QIcon !!! Я буквально несколько дней назад пересел на него с версии 4.3.3 и многих вещей еще просто не знаю.
Большое спасибо! Это полностью решает вопрос, и выглядит наиболее естесственным способом!


Название: Re: QStyleSheet для QToolButton с иконками
Отправлено: boruh от Июль 27, 2009, 08:20
А как теперь сделать тему решенной? Что бы в заголовке было написано "[ РЕШЕНО ]" ?


Название: Re: QStyleSheet для QToolButton с иконками
Отправлено: Пантер от Июль 27, 2009, 11:33
Исправить свой первый пост, изменив заголовок.