-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwidget.cpp
More file actions
73 lines (63 loc) · 2.1 KB
/
widget.cpp
File metadata and controls
73 lines (63 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "widget.h"
#include <QHBoxLayout>
#include <QPainter>
#include <QGraphicsDropShadowEffect>
#define SHADOW_WIDTH 15 //小三角的阴影宽度
#define TRIANGLE_WIDTH 15 //小三角的宽度
#define TRIANGLE_HEIGHT 15 //小三角的高度
#define BORDER_RADIUS 10 //窗口边角弧度
Widget::Widget(QWidget *parent)
: QWidget(parent)
, m_startx(5)
, m_triangleWidth(TRIANGLE_WIDTH)
, m_triangleHeight(TRIANGLE_HEIGHT)
{
setWindowFlag(Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground);
//设置阴影边框
/*
auto shadowEffect = new QGraphicsDropShadowEffect(this);
shadowEffect->setOffset(0,0);
shadowEffect->setColor(Qt::gray);
shadowEffect->setBlurRadius(BORDER_RADIUS);
this->setGraphicsEffect(shadowEffect);
*/
setFixedSize(150,200);
}
void Widget::setCenterWidget(QWidget *widget)
{
QHBoxLayout* hMainLayout = new QHBoxLayout(this);
hMainLayout->addWidget(widget);
hMainLayout->setSpacing(0);
hMainLayout->setContentsMargins(SHADOW_WIDTH,SHADOW_WIDTH + TRIANGLE_WIDTH, SHADOW_WIDTH , SHADOW_WIDTH);
}
void Widget::setStartPos(int startX)
{
m_startx = startX;
}
void Widget::setTriangleInfo(int width, int height)
{
m_triangleWidth = width;
m_triangleHeight = height;
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(255,255,255));
//
QPolygon trianglePolygon;
trianglePolygon << QPoint(m_startx, m_triangleWidth + SHADOW_WIDTH);
trianglePolygon << QPoint(m_startx+m_triangleWidth/2,SHADOW_WIDTH);
trianglePolygon << QPoint(m_startx + m_triangleWidth,m_triangleHeight + SHADOW_WIDTH);
QPainterPath drawPath;
drawPath.addRoundRect(QRect(SHADOW_WIDTH , m_triangleHeight + SHADOW_WIDTH ,
width()-SHADOW_WIDTH *2 ,height() -SHADOW_WIDTH *2 -m_triangleHeight),
BORDER_RADIUS,BORDER_RADIUS);
drawPath.addPolygon(trianglePolygon);
painter.drawPath(drawPath);
}
Widget::~Widget()
{
}