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

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

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

Сообщений: 306


Просмотр профиля
« : Январь 28, 2016, 11:39 »

Здравствуйте, господа форумчане. Захотелось мне в тексте кнопки (QPushButton) сделать тень. Начал искать. Сначала порылся как это сделать через стили qss, но безрезультатно (хотя в css это возможно через text-shadow). Потом подумал сделать через QGraphicsDropShadowEffect - не вышло, хотя для QLabel выходило. Как быть? может кто-то подскажет.
« Последнее редактирование: Январь 29, 2016, 09:29 от billy4685 » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Январь 28, 2016, 11:57 »

Плохо искалось?

http://stackoverflow.com/questions/20552814/drop-shadow-effect-on-qpushbutton-text
Записан

ArchLinux x86_64 / Win10 64 bit
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #2 : Январь 28, 2016, 15:28 »

Я ж писал, что мне не нужно делать тень на QLabel-е, мне нужно на тексте QPushButton-а. А размещать всегда QLabel поверх QPushButton - не вариант. Хочется чего-то более эффективного.
« Последнее редактирование: Январь 28, 2016, 15:30 от billy4685 » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Январь 28, 2016, 16:08 »

Я ж писал, что мне не нужно делать тень на QLabel-е, мне нужно на тексте QPushButton-а. А размещать всегда QLabel поверх QPushButton - не вариант. Хочется чего-то более эффективного.

Тогда, мне кажется, нужно рисовать самому этот текст

Что есть тень? Объект, закрашенный серым (черным), находящимся на заднем фоне с небольшим отклонением от основного
Например: рисуете черный текст, сдвинутый вниз и вправо, поверх него рисуете текст с обычным положением

Теория закончена. Как на практике будет не знаю
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Январь 28, 2016, 18:40 »

Тогда, мне кажется, нужно рисовать самому этот текст

Что есть тень? Объект, закрашенный серым (черным), находящимся на заднем фоне с небольшим отклонением от основного
Например: рисуете черный текст, сдвинутый вниз и вправо, поверх него рисуете текст с обычным положением

Теория закончена. Как на практике будет не знаю
Я использую этот способ, но на тень он не очень похож Улыбающийся Это "emboss", только сдвинутое изображение надо рисовать не черным а белым (или др более светлым чем текст цветом). Тогда вполне прилично.

Я ж писал, что мне не нужно делать тень на QLabel-е, мне нужно на тексте QPushButton-а. А размещать всегда QLabel поверх QPushButton - не вариант. Хочется чего-то более эффективного.
Ну а открыть исходники, посмотреть и передрать? Или надо "ис каропки"?  Улыбающийся
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #5 : Январь 29, 2016, 09:26 »

Спасибо за ответы. Просто думал что в qt в qss-е есть что-то подобное text-shadow, который присущий в сss.
« Последнее редактирование: Январь 29, 2016, 09:28 от billy4685 » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Январь 29, 2016, 10:42 »

Я использую этот способ, но на тень он не очень похож Улыбающийся
Ну не знаю, если это не тень, то что такое тень? Улыбающийся
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #7 : Январь 30, 2016, 10:34 »

Я использую этот способ, но на тень он не очень похож Улыбающийся
Ну не знаю, если это не тень, то что такое тень? Улыбающийся

Это тень))) но не охота самому ее рисовать)) думал что-то есть уже готовое. Но видать придется писать свой класс кнопки и в нем переопределять метод setText и paintEvent. ((
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Январь 30, 2016, 13:52 »

Это тень)))
Это частный случай. Возьмите черный текст на светлом фоне и меньший размер шрифта (напр 12-13), а можно и шрифт "с засечками". И посмотрите как будет выглядеть 1:1
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #9 : Январь 30, 2016, 14:32 »

Что то вышло подобное тени. Но пока не пойму как оно срабатывает. Если я в main.cpp задам стиль Windows.

QApplication::setStyle(QStyleFactory::create("Windows"));

Сделаю кнопку недоступной (enable = false) и задам для кнопки стиль:

pushButton->setStyleSheet("QPushButton:disabled {background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:0.9, stop:0 green, stop:1 grey); color: black;}");

то тогда тень появляется. Но если стиль изменю на следующий:

pushButton->setStyleSheet("QPushButton:disabled {background-color: green; color: black;}");

то тени уже не видно.

Записан
poru
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #10 : Февраль 01, 2016, 17:23 »

В QLabel тень у текста получается потому, что background-color прозрачный.

Код
C++ (Qt)
   QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect();
   effect->setBlurRadius(3);
 
   ui->pushButton->setStyleSheet("border: none");
   ui->pushButton->setGraphicsEffect(effect);
 
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #11 : Февраль 02, 2016, 09:22 »

В QLabel тень у текста получается потому, что background-color прозрачный.
ясно
Записан
poru
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #12 : Февраль 02, 2016, 09:56 »

Цитировать
Это тень))) но не охота самому ее рисовать)) думал что-то есть уже готовое. Но видать придется писать свой класс кнопки и в нем переопределять метод setText и paintEvent. ((

Не обязательно.

Код
C++ (Qt)
class TextShadowStyle : public QProxyStyle
{
public:
   void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole) const
   {
       if (textRole == QPalette::ButtonText)
       {
           QPalette shadowPalette(palette);
           shadowPalette.setColor(QPalette::ButtonText, QColor(0, 0, 0, 40));
           QProxyStyle::drawItemText(painter, rect.adjusted(3, 3, 3, 3), flags, shadowPalette, enabled, text, textRole);
       }
       QProxyStyle::drawItemText(painter, rect, flags, palette, enabled, text, textRole);
   }
};
 
ui->pushButton->setStyle(new TextShadowStyle);
 
« Последнее редактирование: Февраль 02, 2016, 10:01 от poru » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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