crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Текст поверх QAction на QToolBar
RazrFalcon
  опции профиля:
сообщение 25.11.2011, 22:27
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


На QToolBar есть QAction с иконкой. Поверх иконки нужно выводить текст (цифры).
Это возможно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 26.11.2011, 10:02
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


В голову приходит только рисование текста на самом QIcon (а если точнее, то рисование на QPixmap который затем преобразовывать в QIcon).
Ну еще можно создать прозрачный виджет с текстом поверх QToolBar, но это ИМХО излишне.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BlueIceScream
  опции профиля:
сообщение 26.11.2011, 13:55
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 21.11.2011
Из: Республика Дагестан
Пользователь №: 3016

Спасибо сказали: 18 раз(а)




Репутация:   3  


Для решения этой проблемы можно использовать 2 метода:

1) Наследовать QToolBar и переопределить метод PaintEvent. Добавить в опции рисования виджета стиль Qt::ToolButtonTextOverIcon. Затем используя функцию setToolButtonStyle для определения стиля прорисовки в коде.

2) Не использовать QAction. Использовать QToolButton c определенным StyleSheet ' ом. Для вашей проблемы код будет выглядеть примерно так:


QToolBar * tb = new QToolBar(this);

QToolButton * tlb = new QToolButton(this);

tlb->setText("Acr 1");

tlb->setStyleSheet("background-image: url(:/<ваша иконка>); background-repeat: no-repeat; background-position: center center");

tb->addWidget(tlb);


Первый вариант предпочтительнее для долгосрочного использования и соответствует концепциям Qt. Он позволяет добавить дополнительный стиль рисования подконтрольных элементов QToolBar, с возможностью использования уже заранее определенных. Таким образом не меняя структуру интерфейса работы с QToolBar.

Второй вариант требует постоянного изменения в StyleSheet для задания необходимой картинки. Для этого можно наследовать класс QToolButton и добавить в нем функцию void setBgImage (QString bgImg), которая будет устанавливать общий StyleSheet для элемента и использовать конкретную иконку для него.

Я бы выбрала первый вариант.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 26.11.2011, 17:36
Сообщение #4


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Ну мне подходит первый метод. Можете показать немного кода, а то не совсем понимаю что нужно делать :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BlueIceScream
  опции профиля:
сообщение 26.11.2011, 19:16
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 21.11.2011
Из: Республика Дагестан
Пользователь №: 3016

Спасибо сказали: 18 раз(а)




Репутация:   3  


Это сложная работа. И я не умею программировать. Делайте сами. Если не можете, то используйте второй метод.

Единственное что могу посоветовать посмотрите на классы QStyleOptionToolBar и QStyleOptionToolButton. А также Styles & Style Aware Widgets в документации Qt. Если поймете как это работает, сможете рисовать где и как угодно.

В лучшем случае придется переопределять paintEvent только для 2 классов QToolBar и QToolButton.
В paintEvent используйте 2 вышеназванных класса инициализировав их указателем this. Затем меняйте опции рисования. Рисуйте.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BlueIceScream
  опции профиля:
сообщение 26.11.2011, 20:09
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 21.11.2011
Из: Республика Дагестан
Пользователь №: 3016

Спасибо сказали: 18 раз(а)




Репутация:   3  


Используйте QStylePainter для рисования. Изучите схему создания QToolButton, его модель затем используйте необходимые функции drawControl, drawPrimitive и т.д.

Ну и последняя подсказка


void CQToolBtn::paintEvent(QPaintEvent *event)
{
QStyleOptionToolButton opt;
QStylePainter pnt(this);
opt.initFrom(this);

pnt.drawPixmap(opt.rect,QPixmap(this->icon().pixmap(24,24)));
pnt.drawItemText (opt.rect,Qt::AlignCenter,this->palette(),true,this->text());
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 1:44