Qt之窗体透明
简述
关于窗体透明,经常遇到,下面我们针对常用的透明效果进行讲解:
- 全透明(主窗体、子窗体均透明)
- 主窗体透明(子窗体不透明)
- 子窗体透明(主窗体不透明)
正常状态
正常状态下,效果如下:
全透明
这里,我们可以透过整个窗体观看到桌面的背景。
效果
源码
设置窗口的透明度,如下:
setWindowOpacity(0.5);
透明度取值范围:0.0(全透明) - 1.0(不透明),默认值为1.0。
主窗体透明
这里,我们可以透过窗体的一部分观看到桌面的背景。
效果
源码
使用paintEvent进行背景绘制
主窗体采用背景色:
void MainWindow::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
// QColor最后一个参数80代表alpha通道,一般用作透明度
painter.fillRect(rect(), QColor(50, 50, 50, 80));
}
主窗体采用背景图片:
首先,设置背景透明:
setAttribute(Qt::WA_TranslucentBackground, true);
然后,绘制窗体背景:
void QZXingWidget::paintEvent(QPaintEvent *event)
{
QPixmap covertPixmap(":/Images/background");
QPixmap pixmap(covertPixmap.width(), covertPixmap.height());
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
QPoint start_point(0, 0);
QPoint end_point(0, pixmap.height());
//QLinearGradient进行渐变色设置
QLinearGradient gradient(start_point, end_point);
gradient.setColorAt(0, QColor(255, 255, 255, 100));
gradient.setColorAt(0.5, QColor(255, 255, 255, 150));
gradient.setColorAt(1, QColor(255, 255, 255, 255));
painter.fillRect(rect(), QBrush(gradient));
painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
painter.drawPixmap(0, 0, covertPixmap);
painter.end();
QPainter painter2(this);
painter2.drawPixmap(0, 0, pixmap);
}
子窗体透明
这部分在博客中已经分享过了,这里就不再过多阐述,请参考:Qt之透明提示框