Qt текст с тенью - PullRequest
       60

Qt текст с тенью

0 голосов
/ 22 марта 2011

Я вижу это в других приложениях, даже несмотря на то, что внешний вид очень незначительный, эффект очень высококонтрастный -> лучшая читаемость.

Например, вкладки слева в Qt Designer иливкладки вверху в Adobe Photoshop: текст имеет какую-то тень, только 1 пиксель, окружающий текст контрастным цветом.

Есть ли простой способ сделать это с помощью Qt?Или более сложный?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 22 марта 2011

Может быть QGraphicsDropShadowEffect?

1 голос
/ 21 октября 2013

Вот как я сделал тень текста на всех кнопках с Qt5. Я не уверен, возможно ли это с Qt4.

class MyProxyStyle : public QProxyStyle
{
public:

    void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole /* = QPalette::NoRole */) const
    {
        if (textRole == QPalette::ButtonText && dynamic_cast<QAbstractButton*>(painter->device()))
        {
            QPalette palShadow(pal);
            palShadow.setColor(QPalette::ButtonText, QColor(0, 0, 0, 100));
            QProxyStyle::drawItemText(painter, rect.adjusted(1, 1, 1, 1), flags, palShadow, enabled, text, textRole);
        }
        QProxyStyle::drawItemText(painter, rect, flags, pal, enabled, text, textRole);
    }
};

... где-то в main ()

QApplication a;
a.setStyle(new MyProxyStyle);

Если вы удалите QAbstractButton dynamic_cast, заголовки меню также будут затенены, что не всегда желательно.

1 голос
/ 22 марта 2011

Есть несколько способов достижения этого эффекта, но концептуально вы должны рассматривать его как два текстовых слоя с небольшим смещением.

Я делал это раньше, заново реализуя метод paintEvent () QWidget и самостоятельно рисуя текстовые слои.Или вы можете переопределить метод drawItemText () пользовательского QStyle.Но в основном так и делается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...