我有一个QLabel
,我希望中的文字显示为,类似于CSS中的文字阴影方法。有没有办法在Qt中做到这一点?
答案 0 :(得分:2)
比覆盖paintEvent
更容易使用QGraphicsEffect,正是QGraphicsDropShadowEffect。
QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(5);
effect->setXOffset(5);
effect->setYOffset(5);
label->setGraphicsEffect(effect);
结果是这样的:
如果要为阴影着色,可以通过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());
}
};
这些阴影颜色专为浅灰色背景而定制。