Как я могу создать текст с гравированным эффектом?

у меня есть QLabel, а также Я хочу текст внутри него выгравировать, похож на текстово-теневой подход в CSS. Есть ли способ сделать это в Qt?

1

Решение

Гораздо проще, чем переопределить paintEvent использует QGraphicsEffect, точно QGraphicsDropShadowEffect.

QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(5);
effect->setXOffset(5);
effect->setYOffset(5);
label->setGraphicsEffect(effect);

и результат примерно такой:

введите описание изображения здесь

Если вы хотите покрасить тень, вы можете легко добиться этого через QGraphicsDropShadowEffect :: SetColor функция-член.

Надеюсь это поможет.

2

Другие решения

Это может быть достигнуто путем переопределения события рисования метки в подклассе. Пример:

#include <QRect>
#include <QLabel>
#include <QPainter>

class QEngravedLabel : public QLabel
{
public:

explicit QEngravedLabel(QWidget *parent=0, Qt::WindowFlags f=0)
: QLabel(parent, f){};
explicit QEngravedLabel(const QString &text, QWidget *parent=0, Qt::WindowFlags f=0)
: QLabel(text,parent,f){};

protected:

virtual void paintEvent(QPaintEvent *pe) override
{
QRect toPaint(pe->rect());
QPainter painter(this);

toPaint.translate(0,1);
painter.setPen(QColor("#CCC")); // light shadow on bottom
painter.drawText(toPaint, this->alignment() ,this->text());

toPaint.translate(0,-2);
painter.setPen(QColor("#333")); // dark shadow on top
painter.drawText(toPaint, this->alignment() ,this->text());

toPaint.translate(0,1);
painter.setPen(QColor("#000000"));  // text
painter.drawText(toPaint, this->alignment() ,this->text());
}
};

Эти теневые цвета предназначены для светло-серого фона.

0

По вопросам рекламы [email protected]