Название: Html text in QButton Отправлено: fear от Октябрь 16, 2008, 17:25 QButton с текстом html, по аналогии с QLabel, как реализовать или есть готовое решение?
Название: Re: Html text in QButton Отправлено: pastor от Октябрь 16, 2008, 18:17 ищи по форуму, это уже было
Название: Re: Html text in QButton Отправлено: fear от Октябрь 17, 2008, 16:15 ищи по форуму, это уже было Если речь про эту тему (http://www.prog.org.ru/topic_6457_0.html), то полностью вопрос в ней не раскрыли. Метод paintEvent() переопределять таким образом неправильно, потому что приводит к некорректной работе кнопки, не отрисовывается изображение, кнопка неправильно перерисовывается при событиях.Цитата: pastor Код: class HTMLButton: public QPushButton { Правильный путь - переопределение метода QStyle::drawControl() для CE_PushButtonLabel. Но как определить размер области необходимой для отрисовки html-текста? QTextDocument::pageSize()? Почему этот метод возвращает QSizeF, а не QSize? Может кто-нибуть поделится инфой по теме? Название: Re: Html text in QButton Отправлено: pastor от Октябрь 17, 2008, 17:45 Переопределение paintEvent вполне корректное решение. Я привел минимальный функционал, далее допиливате уж вы. Копайте класс QStyleOptionButton, устанавливайте иконки и все остальное
Название: Re: Html text in QButton Отправлено: ритт от Октябрь 17, 2008, 20:17 в данном случае переопределение метода QStyle::drawControl() для CE_PushButtonLabel - неправильный путь, т.к. речь идёт о виджете, а не о стиле!
Название: Re: Html text in QButton Отправлено: fear от Октябрь 20, 2008, 11:18 в данном случае переопределение метода QStyle::drawControl() для CE_PushButtonLabel - неправильный путь, т.к. речь идёт о виджете, а не о стиле! На чем основано это утверждение? Если посмотреть реализацию QPushButton, то отрисовка контента (текст + иконка) происходит именно в стиле... И в этом есть логика, так как на каждой из платформ кнопка должна отрисовываться по своему, в своем стиле.Название: Re: Html text in QButton Отправлено: ритт от Октябрь 20, 2008, 11:41 и?
в каком стиле кнопка QButton отрисовывается с текстом в формате html ? ото ж... стиль рисует кнопку, мы рисуем на кнопке - все довольны. если под "стилем" подразумевается такой стиль, который будет устанавливаться непосредственно кнопке, тролли называет такой подход "прокси-стилем" (proxy-style) в любом случае, пока не появится стандартных кнопок, поддерживающих форматирование хтмл, парсить текст в styleoption'е чтобы потом прогнать через рендерер хтмл и отрисовать на баттоне нелогично. стоит сменить стиль приложения - на кнопке будет хтмльный "мусор"... Название: Re: Html text in QButton Отправлено: fear от Октябрь 20, 2008, 14:35 и? Если бы кнопка отрисовывалась с текстом в формате html, не было бы этой темыв каком стиле кнопка QButton отрисовывается с текстом в формате html ? ото ж... стиль рисует кнопку, мы рисуем на кнопке - все довольны. Не понял смысловой нагрузки этого предложения, если фразой 'мы рисуем на кнопке' вы хотели сказать что контент кнопки QPushButton рисуется в методе paintEvent(), то это не правда, если посмотреть исходный код библиотеки, видно что кнопка рисуется от начала до конца в стилеКод
Код
если под "стилем" подразумевается такой стиль, который будет устанавливаться непосредственно кнопке, тролли называет такой подход "прокси-стилем" (proxy-style) Вы что-то путаете, концепция прокси-стиля позволяет определить единый стиль для всех платформ. Стиль может быть установлен как определенному виджету, так и приложению в целом. Говоря о стиле я имею в виду класс QStyle.в любом случае, пока не появится стандартных кнопок, поддерживающих форматирование хтмл, парсить текст в styleoption'е чтобы потом прогнать через рендерер хтмл и отрисовать на баттоне нелогично. стоит сменить стиль приложения - на кнопке будет хтмльный "мусор"... Что мешает сделать 'стандартную' кнопку самостоятельно? Для начала мне кажется стоит рассмотреть ситуацию с одним стилем, не забегая далеко вперед, изменение стиля требуется далеко не каждому приложению.Название: Re: Html text in QButton Отправлено: ритт от Октябрь 20, 2008, 15:02 ррр...
p.drawControl(QStyle::CE_PushButton, option) рисует контрол (кнопку)... перед отрисовкой отнимаем у QStyleOptionButton содержимое text, парсим этот текст, рендерим и рисуем поверх нарисованной кнопки в определённых координатах - что-нть вроде p.drawText(...)/p.drawPixmap(...) и т.п. в итоге получаем виджет - самодостаточный и не зависящий от какого бы то ни было стиля. а концепция прокси-стиля позволяет внести некритичные изменения в любой стиль, не прикасаясь при этом к коду самого стиля. в аттаче пример такого прокси-стиля. > Что мешает сделать 'стандартную' кнопку самостоятельно? самостоятельно созданный виджет будет уже кастомным, а стандарт в данном случае задают тролли :) |