今天想把窗口变成半透明,查了好久中午找到这个方法
setWindowOpacity(0.5);
但是当QWidget 调用 setAutoFillBackground(true);
方法之后窗口就不能透明,
QWidget * widget1 = new QWidget(&widget);
widget1->setAutoFillBackground(true);
QPalette palette = widget1->palette();
palette.setColor(QPalette::Background, QColor(Qt::red));
widget1->setPalette(palette);
widget1->setWindowOpacity(0.5);
用上述代码试过之后发现只要调用 setAutoFillBackground(true) 这是调色板之后便不能透明,现在还不知道原因先记录下来
2 另一种方法
widget1->setAttribute(Qt::WA_TranslucentBackground, true);
没有实践效果
3利用调色板让窗口半透明
widget1->setAutoFillBackground(true);
QPalette palette = widget1->palette();
palette.setColor(QPalette::Background, QColor(100,100,100,50));
widget1->setPalette(palette);
这样widget1就可以实现半透明,另外记载以下 全透明的color : QColor(0x00,0xff,0xff,0x00));
3 窗体不透明,布局透明 在Paint事件中使用Clear模式绘图(这个我没有试过,是在网上搜来的)
void TestWindow::paintEvent( QPaintEvent* )
{
QPainter p(this);
p.setCompositionMode( QPainter::CompositionMode_Clear );
p.fillRect( 10, 10, 300, 300, Qt::SolidPattern );
}
本文部参考:http://blog.csdn.net/liang890319/article/details/7028520