使用样式表在QMainWindow上实现Qt 5.10半透明背景

5

我想使用QMainWindow::setStyleSheet方法设置我的QMainWindow类的半透明背景。我做了以下操作:

``` QMainWindow { background-color: rgba(255, 255, 255, 0.5); } ```
QMainWindow window;
window.setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
window.setStyleSheet("background-color: rgba(255, 0, 0, 128)");
window.setAttribute(Qt::WA_TranslucentBackground, true);
window.setFixedSize(800, 600);
window.show();

我得到了完全透明的窗口,几乎什么都看不见。如果我不这样做

window.setAttribute(Qt::WA_TranslucentBackground, true);

我得到了完全红色的窗口。

我发现,继承 'QMainWindow',重载 'paintEvent()' 并使用带有 alpha 的 QColor 的 'QPainter->fillRect()' 可以实现我的要求,但它不使用样式表。

有人可以帮助我使用 'setStyleSheet()' 方法来做到这一点吗?我已经找到了很多帖子和答案,但没有一个能帮到我。

最好的问候。

1个回答

3

看起来我是无意中找到了解决方案。必须创建QWidget,将其设置为QMainWindow的中心小部件,并在小部件而不是主窗口上设置样式表。完全正常。

QMainWindow window;
window.setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
window.setAttribute(Qt::WA_TranslucentBackground, true);
window.setFixedSize(800, 600);

QWidget widget(&window);
widget.setStyleSheet("background-color: rgba(255, 0, 0, 128)");

window.setCentralWidget(&widget);
window.show();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接