直接放我的最终解决方案:
QPalette pa = ui->scrollArea->palette();
pa.setBrush(QPalette::Window, Qt::transparent);
ui->scrollArea->setPalette(pa);
网上清一色的使用西面这两句,但我使用样式表并没有解决问题。反而被误导了,使用这种“广为流传”
的方法会让scrollArea中的子空间背景也变成透明的。
ui->scrollArea->setStyleSheet("QScrollArea{background-color:transparent;}");
ui->scrollArea->viewport()->setStyleSheet("background-color:transparent;}");
这个恶毒的方法困扰了我很久,效果图如下。
(我按钮呢?这就是你形容的不会影响子控件背景?)
如果上面使用 QPalette调色板的方法无效,还可以在界面上添加样式表。但是需要在每个scrollArea控件上,右键,更改样式,有点麻烦。
需要注意的是,scrollArea是由两个 窗口组成的,外部窗口为滑块,内部窗口理解为放控件的幕布
因此放入scrollArea控件中的子控件,其实是在它的子窗口scrollAreaWidgetContents中的,添加样式表时需要加在scrollAreaWidgetContents上。
QWidget#scrollAreaWidgetContents{
background:transparent;
}
scrollAreaWidgetContents为scrollArea子窗口控件的对象名称
另外附设置窗口标题栏、窗口背景透明的方法:
//设置窗口背景颜色为蓝色
setPalette(QPalette(Qt::blue));
setAutoFillBackground(true);
//隐藏标题栏
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);
//隐藏窗口背景
setAttribute(Qt::WA_TranslucentBackground, true);
在单独使用隐藏窗口背景,而没有隐藏标题栏时,窗口背景会呈现出黑色。