Qt_陰影效果

1、控件陰影效果html

爲子部件添加陰影比較簡單,使用以下方式:app

QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this);

shadow_effect->setOffset(-5, 5);

shadow_effect->setColor(Qt::gray);

shadow_effect->setBlurRadius(8);

network_group_box->setGraphicsEffect(shadow_effect);

    效果以下:less

Qt之再談陰影邊框

2、 窗口陰影效果(代碼實現)oop

void DropShadowWidget::paintEvent(QPaintEvent *event)
{ 

    QPainterPath path;
    path.setFillRule(Qt::WindingFill);
    path.addRect(10, 10, this->width()-20, this->height()-20);
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);
    painter.fillPath(path, QBrush(Qt::white));

    QColor color(0, 0, 0, 50);
    for(int i=0; i<10; i++)
    {
        QPainterPath path;
        path.setFillRule(Qt::WindingFill);
        path.addRect(10-i, 10-i, this->width()-(10-i)*2, this->height()-(10-i)*2);
        color.setAlpha(150 - qSqrt(i)*50);
        painter.setPen(color);
        painter.drawPath(path);
    }
}

  3、窗口陰影效果(圖片繪製)this

 陰影邊框很常見,諸如360以及其餘不少軟件都有相似效果,瞭解CSS3的同窗們應該都知道box-shadow,它就是來設定陰影效果的,那麼Qt呢?看過一些資料,說是QSS是基於CSS2的,既然如此,box-shadow是基於CSS3的!那麼Qt定然就用不了!url

  搜了一些資料,每張圖片都作成陰影效果的當然不可能,直接捨棄(即便能夠,也不採納)。若是實時的去畫圖,效率過低,最後選擇了拼圖的方式!
Qt之陰影邊框
  效果以下:
  Qt之陰影邊框
Qt之陰影邊框
  左上角、左下角、右上角、右下角、上、下、左、右,這幾個方向都繪製對應的圖便可!
 
#include "shadow_widget.h"

ShadowWidget::ShadowWidget(QWidget *parent)
   : QDialog(parent)
{
   setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
   setAttribute(Qt::WA_TranslucentBackground);
}
ShadowWidget::~ShadowWidget()
{
}
void ShadowWidget::paintEvent(QPaintEvent *event)
{
   QPainter painter(this);
   this->drawShadow(painter);
   painter.setPen(Qt::NoPen);
   painter.setBrush(Qt::white);
   painter.drawRect(QRect(SHADOW_WIDTH, SHADOW_WIDTH, this->width()-2*SHADOW_WIDTH, this->height()-2*SHADOW_WIDTH));
}
void ShadowWidget::drawShadow(QPainter &painter)
{
   //繪製左上角、左下角、右上角、右下角、上、下、左、右邊框
   QList pixmaps;
   pixmaps.append(QPixmap(":/shadow/shadow_left"));
   pixmaps.append(QPixmap(":/shadow/shadow_right"));
   pixmaps.append(QPixmap(":/shadow/shadow_top"));
   pixmaps.append(QPixmap(":/shadow/shadow_bottom"));
   pixmaps.append(QPixmap(":/shadow/shadow_left_top"));
   pixmaps.append(QPixmap(":/shadow/shadow_right_top"));
   pixmaps.append(QPixmap(":/shadow/shadow_left_bottom"));
   pixmaps.append(QPixmap(":/shadow/shadow_right_bottom"));
   painter.drawPixmap(0, 0, SHADOW_WIDTH, SHADOW_WIDTH, pixmaps[4]);
   painter.drawPixmap(this->width()-SHADOW_WIDTH, 0, SHADOW_WIDTH, SHADOW_WIDTH, pixmaps[5]);
   painter.drawPixmap(0,this->height()-SHADOW_WIDTH, SHADOW_WIDTH, SHADOW_WIDTH, pixmaps[6]);
   painter.drawPixmap(this->width()-SHADOW_WIDTH, this->height()-SHADOW_WIDTH, SHADOW_WIDTH, SHADOW_WIDTH, pixmaps[7]);
   painter.drawPixmap(0, SHADOW_WIDTH, SHADOW_WIDTH, this->height()-2*SHADOW_WIDTH, pixmaps[0].scaled(SHADOW_WIDTH, this->height()-2*SHADOW_WIDTH));
   painter.drawPixmap(this->width()-SHADOW_WIDTH, SHADOW_WIDTH, SHADOW_WIDTH, this->height()-2*SHADOW_WIDTH, pixmaps[1].scaled(SHADOW_WIDTH, this->height()- 2*SHADOW_WIDTH));
   painter.drawPixmap(SHADOW_WIDTH, 0, this->width()-2*SHADOW_WIDTH, SHADOW_WIDTH, pixmaps[2].scaled(this->width()-2*SHADOW_WIDTH, SHADOW_WIDTH));
   painter.drawPixmap(SHADOW_WIDTH, this->height()-SHADOW_WIDTH, this->width()-2*SHADOW_WIDTH, SHADOW_WIDTH, pixmaps[3].scaled(this->width()-2*SHADOW_WIDTH, SHADOW_WIDTH));

}

  

轉自http://blog.sina.com.cn/s/blog_a6fb6cc90101eoc7.htmlspa

相關文章
相關標籤/搜索