Текст поверх QAction на QToolBar |
Здравствуйте, гость ( Вход | Регистрация )
Текст поверх 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()); } |
|
|
Текстовая версия | Сейчас: 26.11.2024, 12:43 |