首页 > 解决方案 > QMainWindow上使用样式表的Qt 5.10半透明背景

问题描述

我想使用 QMainWindow::setStyleSheet 方法设置我的 QMainWindow 类半透明背景。我做类似的事情:

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()'并使用'QPainter->fillRect()'和带有alpha的QColor做我想要的,但它没有使用样式表。

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

此致。

标签: c++backgroundstylesheettransparentqt5.10

解决方案


看起来我偶然找到了解决方案。必须创建 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();

推荐阅读