1. 绘制窗体的阴影
void ShadowWidget::paintEvent(QPaintEvent * event)
{
QDialog::paintEvent(event);
// 设置除阴影外,其他部分的窗体样式;
QPainterPath pathShadow;
pathShadow.setFillRule(Qt::WindingFill);
pathShadow.addRect(10, 10, this->width() - 20, this->height() - 20);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.fillPath(pathShadow, 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);
}
}
2. 创建可拖动 的 窗体:
【注意】
通过函数 globalPos() 返回的全局坐标值避免窗口的抖动
若使用 pos() 函数获取 相对位置,在拖动过程 窗口 会出现抖动现象
globalPos()、globalX()、globalY()