Russian Qt Forum

Qt => Вопросы новичков => Тема начата: billy4685 от Февраль 26, 2016, 00:05



Название: Как разместить текст над иконкой в QToolButton-е?
Отправлено: billy4685 от Февраль 26, 2016, 00:05
Доброй ночи, господа форумчане. Буквально пару дней назад передо мной была поставлена задача в приложении разместить на кнопке иконку под текстом. Я сначала подумал, "легко!", так как ранее пользовался QToolButton-ом, и уже размещал неоднократно на нем иконку, и иконку с текстом. Но ранее особо не парился над положением текста по отношению иконки, устанавливая для QToolButton-а свойство toolButtonStyle в ToolButtonTextBesideIcon. А теперь вот была поставлена такая задачка.
Я сразу начал просматривать всевозможные стили в свойстве toolButtonStyle (рисунок ниже). Увы но нет там стандартного свойства расположения текста над иконкой ((. Расстроился. Последующие поиски так и не дали результата, смотрел даже в StyleSheet-е для QToolButton-а, увы не нашел. Может кто-то знает, как разместить текст над иконкой?


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: Smogg от Февраль 27, 2016, 04:26
рисовать самому?


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: poru от Март 01, 2016, 09:24
Есть 3 варианта.
1. Переписать drawItemText и drawItemPixmap наследовавшись от QProxyStyle.
2. Переписать paintEvent наследовавшись от QToolButton.
3. В конструкторе формы создать layout с двумя QLable для каждой кнопки.

Я бы выбрал 3-й вариант, он будет содержать ~40 строк кода и простоту понимания в отличие от других вариантов, содержащих ~140 строк кода из которых 95% будет повторять исходники Qt.


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: Racheengel от Март 01, 2016, 11:38
Я бы выбрал 3-й вариант, он будет содержать ~40 строк кода и простоту понимания в отличие от других вариантов, содержащих ~140 строк кода из которых 95% будет повторять исходники Qt.

И будет выглядеть как откровенное убожество.
Не насилуйте фреймворк, сделайте по п.2.


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: poru от Март 01, 2016, 11:49
Я бы выбрал 3-й вариант, он будет содержать ~40 строк кода и простоту понимания в отличие от других вариантов, содержащих ~140 строк кода из которых 95% будет повторять исходники Qt.

И будет выглядеть как откровенное убожество.
Не насилуйте фреймворк, сделайте по п.2.

Визуально в чем проявляется убожество?


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: Igors от Март 01, 2016, 12:18
Я бы отрисовал иконку и текст вверху в буфере с альфой и подсунул бы его кнопке как новую иконку


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: poru от Март 01, 2016, 12:37
Я бы отрисовал иконку и текст вверху в буфере с альфой и подсунул бы его кнопке как новую иконку

Хорошо. Кстати поддерживаемый Racheengel вариант 2  не подразумевает или "закалебет" поддержку QSS, так же как и ваш . По большому счету в.1. самый верный, но тут, если углубиться в исходники, виноваты сами разрабы, что не выделили текст и картинку в отдельные элементы.


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: Racheengel от Март 01, 2016, 14:01
Визуально в чем проявляется убожество?

В том, что это будет 2 кнопки, а не одна.

П.1 возможен, но тогда придется адаптироваться под каждый стиль. Если цель именно в этом, то тогда мы получим N классов стилей с кастомной отрисовкой кнопки.


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: poru от Март 01, 2016, 14:49
Визуально в чем проявляется убожество?

В том, что это будет 2 кнопки, а не одна.

П.1 возможен, но тогда придется адаптироваться под каждый стиль. Если цель именно в этом, то тогда мы получим N классов стилей с кастомной отрисовкой кнопки.

А че только кнопки 2-е )), а не 3-и - два "лэйбла" плюс сама кнопуля, одна область приема message. А в остальном сколько стилей - столько отрисовок. А у тебя в исходниках сколько стилей отрисовывает текст выше картинки?


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: Igors от Март 01, 2016, 14:52
[off]
Вот почему такие темы собирают немало постов? Да, ТС наскочил на неудачное место, придется немного попотеть, c'est la vie. Но по существу все уже сказано, все варианты предложены. Нееет, щас будут месить и месить до полного посинения. Что за нездоровый интерес к чисто рутинной работе?  О чем-то большом и светлом уже и не мечтаем?  :)
[/off]


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: Racheengel от Март 01, 2016, 16:02
А че только кнопки 2-е )), а не 3-и - два "лэйбла" плюс сама кнопуля, одна область приема message. А в остальном сколько стилей - столько отрисовок. А у тебя в исходниках сколько стилей отрисовывает текст выше картинки?

Да я как-то делал что-то подобное, только мне надо было чекбокс и картинку совместить.
Пытался лэйаутом, стало тока хуже, поэтому плюнул и переопределил отрисовку.
Работало более-менее со всеми стилями, просто надо рисовать правильно :)


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: poru от Март 01, 2016, 16:34
Да все нормально, я против твоих домыслов ничего не имею, есть как есть, пацан просил, надо было ему помочь, я дал варианты решения (если надо разложу), у тебя другие есть? Есть, выкладывай конкретно, не только ему одному помогут, нас тут много.....


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: Racheengel от Март 01, 2016, 17:39
Да все нормально, я против твоих домыслов ничего не имею, есть как есть, пацан просил, надо было ему помочь, я дал варианты решения (если надо разложу), у тебя другие есть? Есть, выкладывай конкретно, не только ему одному помогут, нас тут много.....

Это мне или не мне :)


Название: Re: Как разместить текст над иконкой в QToolButton-е?
Отправлено: billy4685 от Март 02, 2016, 12:36
Благодарю всем за ответы.