Russian Qt Forum

Qt => Вопросы новичков => Тема начата: billy4685 от Январь 28, 2016, 11:39



Название: Как установить тень для текста в QPushBut?
Отправлено: billy4685 от Январь 28, 2016, 11:39
Здравствуйте, господа форумчане. Захотелось мне в тексте кнопки (QPushButton) сделать тень. Начал искать. Сначала порылся как это сделать через стили qss, но безрезультатно (хотя в css это возможно через text-shadow). Потом подумал сделать через QGraphicsDropShadowEffect - не вышло, хотя для QLabel выходило. Как быть? может кто-то подскажет.


Название: Re: Как установить тень для текста в QPushBut?
Отправлено: kuzulis от Январь 28, 2016, 11:57
Плохо искалось?

http://stackoverflow.com/questions/20552814/drop-shadow-effect-on-qpushbutton-text


Название: Re: Как установить тень для текста в QPushBut?
Отправлено: billy4685 от Январь 28, 2016, 15:28
Плохо искалось?

http://stackoverflow.com/questions/20552814/drop-shadow-effect-on-qpushbutton-text
Я ж писал, что мне не нужно делать тень на QLabel-е, мне нужно на тексте QPushButton-а. А размещать всегда QLabel поверх QPushButton - не вариант. Хочется чего-то более эффективного.


Название: Re: Как установить тень для текста в QPushBut?
Отправлено: gil9red от Январь 28, 2016, 16:08
Плохо искалось?

http://stackoverflow.com/questions/20552814/drop-shadow-effect-on-qpushbutton-text
Я ж писал, что мне не нужно делать тень на QLabel-е, мне нужно на тексте QPushButton-а. А размещать всегда QLabel поверх QPushButton - не вариант. Хочется чего-то более эффективного.

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

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

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


Название: Re: Как установить тень для текста в QPushBut?
Отправлено: Igors от Январь 28, 2016, 18:40
Тогда, мне кажется, нужно рисовать самому этот текст

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

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

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


Название: Re: Как установить тень для текста в QPushBut?
Отправлено: billy4685 от Январь 29, 2016, 09:26
Спасибо за ответы. Просто думал что в qt в qss-е есть что-то подобное text-shadow, который присущий в сss.


Название: Re: Как установить тень для текста в QPushBut?
Отправлено: Old от Январь 29, 2016, 10:42
Я использую этот способ, но на тень он не очень похож :)
Ну не знаю, если это не тень, то что такое тень? :)


Название: Re: Как установить тень для текста в QPushBut?
Отправлено: billy4685 от Январь 30, 2016, 10:34
Я использую этот способ, но на тень он не очень похож :)
Ну не знаю, если это не тень, то что такое тень? :)

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


Название: Re: Как установить тень для текста в QPushBut?
Отправлено: Igors от Январь 30, 2016, 13:52
Это тень)))
Это частный случай. Возьмите черный текст на светлом фоне и меньший размер шрифта (напр 12-13), а можно и шрифт "с засечками". И посмотрите как будет выглядеть 1:1


Название: Re: Как установить тень для текста в QPushBut?
Отправлено: billy4685 от Январь 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;}");

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



Название: Re: Как установить тень для текста в QPushBut?
Отправлено: poru от Февраль 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);
 


Название: Re: Как установить тень для текста в QPushBut?
Отправлено: billy4685 от Февраль 02, 2016, 09:22
В QLabel тень у текста получается потому, что background-color прозрачный.
ясно


Название: Re: Как установить тень для текста в QPushBut?
Отправлено: poru от Февраль 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);