1.问题现象
项目中在使用QWebEnginer的时候产生的网页界面不刷新问题。之前遇到一次没记录下来,这次又遇到了记录下问题。
2.问题查找
经过多次代码查找和分析,可能是由于透明或者阴影导致的窗口刷新冲突的问题,经过查找后发现是设置窗口阴影导致界面不刷新。
//设置阴影
QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect;
effect->setOffset(0, 0);
effect->setColor(QColor(0, 0, 0, 80));
effect->setBlurRadius(15);
ui.frameInternetChat->setGraphicsEffect(effect);
3.解决方法
通过painEvent设置窗口阴影,不使用QGraphicsDropShadowEffect ,代码如下:
int nShadowsWidth = 10; // 阴影宽度
int nRadius = 10; // 圆角宽度
QPainterPath path;
path.setFillRule(Qt::WindingFill);
//path.addRect(nShadowsWidth, nShadowsWidth, this->width() - (nShadowsWidth - i) * 2, this->height() - (nShadowsWidth - i) * 2);
//设置圆角矩形
path.addRoundedRect(nShadowsWidth, nShadowsWidth, this->width() - nShadowsWidth*2, this->height() - nShadowsWidth*2, nRadius, nRadius);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.fillPath(path, QBrush(Qt::white));
QColor color(0, 0, 0, 10);
for (int i = 0; i < nShadowsWidth; i++)
{
QPainterPath path;
path.setFillRule(Qt::WindingFill);
// 画带圆角的矩形
path.addRoundedRect(nShadowsWidth - i, nShadowsWidth - i, this->width() - (nShadowsWidth - i) * 2, this->height() - (nShadowsWidth - i) * 2, nRadius +i, nRadius +i);
画带的矩形
//path.addRect(nShadowsWidth - i, nShadowsWidth - i, this->width() - (nShadowsWidth - i) * 2, this->height() - (nShadowsWidth - i) * 2);
color.setAlpha(150 - qSqrt(i) * 50);
painter.setPen(color);
painter.drawPath(path);
}
由于本人使用的是带圆角的窗口,所以根据圆角大小画阴影的需要圆角,可以使用addRoundedRect这个方法添加到path上画圆角矩形,另外画阴影需要在窗口布局上留下足够空间.