2014-10-03 2 views

답변

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

이 그림자 색상은 밝은 회색 배경에 맞춰져 있습니다.

2

paintEvent을 오버라이드하는 것보다 훨씬 쉽고 QGraphicsEffectQGraphicsDropShadowEffect을 사용하고 있습니다.

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

은 그 결과는 다음과 같이이다 :

enter image description here

당신은 당신이 쉽게 QGraphicsDropShadowEffect::setColor 멤버 함수를 통해이를 달성 할 수있는 그림자 색상을 원하는 경우

.

희망이 도움이됩니다.

+0

그림자는 내가 묻고있는 것보다 완전히 다른 것을하는 훨씬 쉬운 방법입니다. 그림자 효과는 텍스트가 페이지 위에 떠있는 것처럼 보이게합니다. 새겨진 효과는 텍스트를 페이지로 가라 앉혀 보이므로이 방법은 질문에 대답하지 않습니다. –

+0

미안 해요, 당신은'text-shadow' 효과를 요구했습니다. 나는'새겨진 '것이 무엇인지 잘 모르겠습니다 ... –

관련 문제