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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как разместить текст над иконкой в QToolButton-е?  (Прочитано 6767 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Февраль 26, 2016, 00:05 »

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

рисовать самому?
Записан
poru
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #2 : Март 01, 2016, 09:24 »

Есть 3 варианта.
1. Переписать drawItemText и drawItemPixmap наследовавшись от QProxyStyle.
2. Переписать paintEvent наследовавшись от QToolButton.
3. В конструкторе формы создать layout с двумя QLable для каждой кнопки.

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

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Март 01, 2016, 11:38 »

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

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
poru
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #4 : Март 01, 2016, 11:49 »

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

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

Визуально в чем проявляется убожество?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Март 01, 2016, 12:18 »

Я бы отрисовал иконку и текст вверху в буфере с альфой и подсунул бы его кнопке как новую иконку
Записан
poru
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #6 : Март 01, 2016, 12:37 »

Я бы отрисовал иконку и текст вверху в буфере с альфой и подсунул бы его кнопке как новую иконку

Хорошо. Кстати поддерживаемый Racheengel вариант 2  не подразумевает или "закалебет" поддержку QSS, так же как и ваш . По большому счету в.1. самый верный, но тут, если углубиться в исходники, виноваты сами разрабы, что не выделили текст и картинку в отдельные элементы.
« Последнее редактирование: Март 01, 2016, 12:44 от poru » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Март 01, 2016, 14:01 »

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

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

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
poru
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #8 : Март 01, 2016, 14:49 »

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

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

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

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

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Март 01, 2016, 14:52 »

[off]
Вот почему такие темы собирают немало постов? Да, ТС наскочил на неудачное место, придется немного попотеть, c'est la vie. Но по существу все уже сказано, все варианты предложены. Нееет, щас будут месить и месить до полного посинения. Что за нездоровый интерес к чисто рутинной работе?  О чем-то большом и светлом уже и не мечтаем?  Улыбающийся
[/off]
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #10 : Март 01, 2016, 16:02 »

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

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
poru
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #11 : Март 01, 2016, 16:34 »

Да все нормально, я против твоих домыслов ничего не имею, есть как есть, пацан просил, надо было ему помочь, я дал варианты решения (если надо разложу), у тебя другие есть? Есть, выкладывай конкретно, не только ему одному помогут, нас тут много.....
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #12 : Март 01, 2016, 17:39 »

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

Это мне или не мне Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #13 : Март 02, 2016, 12:36 »

Благодарю всем за ответы.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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