如何创建具有雕刻效果的文本?

时间:2014-10-03 12:52:39

标签: c++ qt text-formatting

我有一个QLabel我希望中的文字显示为,类似于CSS中的文字阴影方法。有没有办法在Qt中做到这一点?

2 个答案:

答案 0 :(得分:2)

比覆盖paintEvent更容易使用QGraphicsEffect,正是QGraphicsDropShadowEffect

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

结果是这样的:

enter image description here

如果要为阴影着色,可以通过QGraphicsDropShadowEffect::setColor成员函数轻松实现此目的。

希望这有帮助。

答案 1 :(得分:0)

这可以通过覆盖子类中标签的paint事件来实现。例如:

#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());
    }
};

这些阴影颜色专为浅灰色背景而定制。