今天做了个这个工具包界面,没什么难度 想记录一下这个黑边的做法
1.黑边首先父窗口paintevent事件画10个矩形 从最外面依次往里画 a值关系具体看下面函数
void RXTools::paintEvent(QPaintEvent *)
{
//相当于依次画10个a值递减德矩形
QPainterPath path;
path.setFillRule(Qt::WindingFill);
path.addRect(10, 10, this->width() - 20, this->height() - 20);
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);
//if (i > 8)
//{
// color.setAlpha(0);
//}
painter.setPen(color);
painter.drawPath(path);
}
}
2.最外层父窗口要设置成透明
在构造函数里设置了
this->setWindowFlags(Qt::FramelessWindowHint);//需要去掉标题栏
this->setAttribute(Qt::WA_TranslucentBackground);
this->setStyleSheet("background:rgba(0,255,255,0.0);");
三句话缺一不可
3.一般最外层窗口一定是透明的,上面放一个不透明的widget来做主窗口,也可以用painter来画内部的背景色。
有的时候中间可能要扣掉不规则图形
2020.10.26
我觉得还是尽量不要用如下的Qt接口画阴影,出现了QDialog无法刷新的情况,其次也不太好控制,子窗口容易被影响,效率变低。
//QGraphicsDropShadowEffect* shadowEffect = new QGraphicsDropShadowEffect(this);
//if (NULL != shadowEffect) {
// shadowEffect->setOffset(0, 0);
// shadowEffect->setColor(QColor(105, 105, 105));
// shadowEffect->setBlurRadius(10);
// setGraphicsEffect(shadowEffect);
//}