一、通过调色板
在构造函数中添加代码
QPalette pal = palette();
pal.setColor(QPalette::Backgroud, QColor(0x00, 0xff, 0x00, 0x00));
this->setPalette(pal);
效果:窗口整体透明,但窗口控件不透明,QLable控件只是字显示,控件背景色透明,窗体客户区完全透明
二、setAttribute
使用函数setAttribute(Qt::WA_TranslucentBackground, true);
效果:与第一种一样
三、setWindowOpacity
这个函数可以分10个等级调整透明度,配合QSlider控件可以做成控制条
效果:窗口及控件都半透明
四、paintEvent
void TestWindow::paintEvent( QPaintEvent* )
{
QPainter p(this);
p.setCompositionMode( QPainter::CompositionMode_Clear );
p.fillRect( 10, 10, 300, 300, Qt::SolidPattern );
}
效果:窗口整体不透明,局部透明
绘制区域全透明,如果绘制区域有控件不会影响控件
五、使用qss样式表
dlg->setStyleSheet(“QDialog{background-color: rgba(255, 0, 0, 0.5);}”);
其中0.5表示透明度,0表示全透明、1表示不透明
如果空间是单独的窗口,比如主窗口(QWidget)、弹出窗口(QDialog)不能透视出下层的窗口;
在窗口中布局的控件(如QWidget、QFrame)可以透视出父控件