Russian Qt Forum
Ноябрь 22, 2024, 17:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QStyleSheet для QToolButton с иконками [РЕШЕНО]  (Прочитано 7643 раз)
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. В доках примеры есть, но увы как раз по этому пункту (иконки на кнопках для разных состояний) я что-то не нашел ничего толкового.

Если вопрос визуализации решается только дизайнером и картинками (т.е. рисуется не иконка для кнопки, а цельная кнопка с фоном, рамкой и т.д.) - то значит будем делать так, не проблема. Просто мне хочется узнать, может быть есть какие-то стандартные выработанные пути по решению данной задачи.
« Последнее редактирование: Июль 27, 2009, 11:56 от boruh » Записан
Rcus
Гость
« Ответ #1 : Июль 26, 2009, 20:54 »

/* здесь был абзац о едином стиле графической оболочки и культе единого стиле в мире иксов */\

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

/* а здесь было замечание о несовершенстве qss и непригодности его для серьезных приложений, paintEvent, style()->drawPrimitivee рулят */
Записан
boruh
Гость
« Ответ #2 : Июль 27, 2009, 08:17 »

О-па. Представьте себе - а я и не знал, что в версии 4.5.2 была расширена функциональность класса QIcon !!! Я буквально несколько дней назад пересел на него с версии 4.3.3 и многих вещей еще просто не знаю.
Большое спасибо! Это полностью решает вопрос, и выглядит наиболее естесственным способом!
Записан
boruh
Гость
« Ответ #3 : Июль 27, 2009, 08:20 »

А как теперь сделать тему решенной? Что бы в заголовке было написано "[ РЕШЕНО ]" ?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Июль 27, 2009, 11:33 »

Исправить свой первый пост, изменив заголовок.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.06 секунд. Запросов: 22.