2019-09-28 17:15:40 +08:00
|
|
|
|
#include <testshadowwidget2.h>
|
2019-09-01 14:39:26 +08:00
|
|
|
|
|
|
|
|
|
#include <QPainter>
|
|
|
|
|
|
|
|
|
|
#include <QtMath>
|
|
|
|
|
|
|
|
|
|
#include <qqtbodymover.h>
|
|
|
|
|
|
2019-09-28 17:15:40 +08:00
|
|
|
|
#include <qqtcore.h>
|
|
|
|
|
|
2019-09-01 14:39:26 +08:00
|
|
|
|
TestShadowWidget2::TestShadowWidget2 ( QWidget* parent ) : QWidget ( parent )
|
|
|
|
|
{
|
|
|
|
|
setWindowFlag ( Qt::FramelessWindowHint );
|
2019-09-28 17:15:40 +08:00
|
|
|
|
setAttribute ( Qt::WA_TranslucentBackground );
|
2019-09-01 14:39:26 +08:00
|
|
|
|
|
|
|
|
|
QQtBodyMover* mover = new QQtBodyMover ( this );
|
|
|
|
|
installEventFilter ( mover );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TestShadowWidget2::~TestShadowWidget2() {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void TestShadowWidget2::paintEvent ( QPaintEvent* event )
|
|
|
|
|
{
|
|
|
|
|
|
2019-09-28 17:15:40 +08:00
|
|
|
|
//return QWidget::paintEvent ( event );
|
|
|
|
|
#if 0
|
|
|
|
|
QWidget* wgt = this;
|
|
|
|
|
|
|
|
|
|
QPainter painter ( wgt );
|
|
|
|
|
QColor color ( 217, 229, 246, 55 );
|
|
|
|
|
for ( int i = 0; i < 10; i++ )
|
|
|
|
|
{
|
|
|
|
|
QPainterPath path;
|
|
|
|
|
path.setFillRule ( Qt::OddEvenFill );
|
|
|
|
|
path.addRoundRect ( 10 - i, 10 - i,
|
|
|
|
|
wgt->width() - ( 10 - i ) * 2,
|
|
|
|
|
wgt->height() - ( 10 - i ) * 2,
|
|
|
|
|
4 );
|
|
|
|
|
color.setAlpha ( 255 - qSqrt ( i ) * 70 );
|
|
|
|
|
painter.setPen ( color );
|
|
|
|
|
painter.drawPath ( path );
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if 0
|
2019-09-01 14:39:26 +08:00
|
|
|
|
QPainterPath path;
|
|
|
|
|
path.setFillRule ( Qt::WindingFill );
|
|
|
|
|
path.addRect ( 10, 10, this->width() - 20, this->height() - 20 );
|
2019-09-28 17:15:40 +08:00
|
|
|
|
|
2019-09-01 14:39:26 +08:00
|
|
|
|
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 );
|
|
|
|
|
}
|
2019-09-28 17:15:40 +08:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if 1
|
|
|
|
|
//颜色样式解决了,
|
|
|
|
|
|
|
|
|
|
//还要解决位置,从margin开始到10.
|
|
|
|
|
//如何让margin区域透明呢?setMask?
|
|
|
|
|
|
|
|
|
|
//不能从margin开始,应该从frameGeometry开始。
|
|
|
|
|
//注意下painter的平移。painterpath是必须从0开始画。painter需要平移一定的距离。translate
|
|
|
|
|
//难点。
|
|
|
|
|
//高级绘图、视频播放、3D、动画
|
|
|
|
|
|
|
|
|
|
QPainter painter ( this );
|
|
|
|
|
|
|
|
|
|
//QPainterPath path;
|
|
|
|
|
//path.setFillRule ( Qt::WindingFill );
|
|
|
|
|
//path.addRoundRect ( 10, 10, this->width() - 20, this->height() - 20, 3 );
|
|
|
|
|
//painter.setRenderHint ( QPainter::Antialiasing, true );
|
|
|
|
|
//pline() << painter.background().color();
|
|
|
|
|
//painter.fillPath ( path, painter.background().color() );
|
|
|
|
|
|
|
|
|
|
//50这里没用
|
|
|
|
|
QColor color ( 0, 0, 0, 50 );
|
|
|
|
|
//40代表了横跨幅
|
|
|
|
|
int j = 40;
|
|
|
|
|
for ( int i = 0; i < j; i++ )
|
|
|
|
|
{
|
|
|
|
|
QPainterPath path;
|
|
|
|
|
path.setFillRule ( Qt::WindingFill );
|
|
|
|
|
//10就是margin。xxx
|
|
|
|
|
//画的圈子越来越大
|
|
|
|
|
path.addRoundRect ( j - i, j - i, this->width() - ( j - i ) * 2, this->height() - ( j - i ) * 2, 3 );
|
|
|
|
|
//颜色越来越浅。 初始数字越小,效果越好,越精细。
|
|
|
|
|
qreal alpha = 10 - ( qreal ) i * 1 / ( j / 30 ); //150 - qSqrt ( i ) * 50 ;
|
|
|
|
|
//无论如何不能过滤,都是细线。
|
|
|
|
|
//if ( ( ( int ) ( alpha / 10 ) % 2 ) == 1 )
|
|
|
|
|
// continue;
|
|
|
|
|
if ( alpha >= 0 )
|
|
|
|
|
{
|
|
|
|
|
color.setAlpha ( alpha );
|
|
|
|
|
pline() << alpha;
|
|
|
|
|
painter.setPen ( color );
|
|
|
|
|
painter.drawPath ( path );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//pline() << painter.compositionMode();
|
|
|
|
|
//painter.setCompositionMode ( QPainter::CompositionMode_Clear );
|
|
|
|
|
//painter.fillPath ( path, QBrush ( Qt::white ) );
|
|
|
|
|
|
|
|
|
|
QPainterPath p0;
|
|
|
|
|
p0.addRoundRect ( 40, 40, 80, 80, 3 );
|
|
|
|
|
p0.addRoundRect ( 50, 50, 50, 50, 3 );
|
|
|
|
|
//painter.save();
|
|
|
|
|
QPainter::CompositionMode m0 = painter.compositionMode();
|
|
|
|
|
painter.setCompositionMode ( QPainter::CompositionMode_Clear );
|
|
|
|
|
painter.fillPath ( p0, QBrush ( Qt::transparent ) );
|
|
|
|
|
painter.setCompositionMode ( m0 );
|
|
|
|
|
//painter.restore();
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
2019-09-01 14:39:26 +08:00
|
|
|
|
}
|