Qt的主窗体要做出类似WIN7那种圆角阴影边框,这一直是美工的需求。
这里是有一些门道的,尤其是,这里藏着一个很大的秘密。
这个秘密是一个QT的至少横跨3个版本,存在了2年多的BUG。。。
https://bugreports.qt-project.org/browse/QTBUG-17548
ok,看完这个BUG的应急解决办法,然后你再需加上如下代码例子,就可见效了
void MainWindow::paintEvent(QPaintEvent *event)
{
QPainterPath _qppath;
_qppath.setFillRule(Qt::WindingFill);
_qppath.addRect(10, 10, this->width()-20, this->height()-20);
QPainter _qpainter(this);
_qpainter.setRenderHint(QPainter::Antialiasing, true);
_qpainter.fillPath(_qppath, QBrush(Qt::white));
QColor color(0, 0, 0, 55);
for(int i=0; i<10; i++)
{
QPainterPath _qppath_shadow;
_qppath_shadow.setFillRule(Qt::WindingFill);
_qppath_shadow.addRoundRect(10-i, 10-i, this->width()-(10-i)*2, this->height()-(10-i)*2,5);
color.setAlpha(155 - qSqrt(i)*55);
_qpainter.setPen(color);
_qpainter.drawPath(_qppath_shadow);
}
}