我们正在尝试制作一个带有Mac半透明效果的QMainWindow。我们使用的是PyQt,但问题是Qt问题。到目前为止,我们已经尝试过了,它要么是完全透明的,要么是完全不透明的(就像普通窗口一样)。如果我们打开Qt.WA_TranslucentBackground,窗口背景会变得100%完全透明。
此外,当您滚动时,我们在其上显示的QGraphicsView会留下痕迹。鼠标输入也“通过”透明部分-点击图形视图的透明部分将注册为点击它后面的窗口。使用任何自定义背景色设置样式表都不会有任何效果。如果我们把它关掉,窗户仍然是不透明的。然后我们可以使用样式表更改背景颜色,但它仍然是不透明的。
图灵WA_FramelessWindowHint的开关似乎也不能解决任何问题。setAutoFillBackground()也不需要。你知道如何制作一个带有Yosemite半透明效果的窗口吗?
下面是一个Python示例程序来测试这一点:
# Attempt at Mac OSX Translucency (example code)
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
Qt = QtCore.Qt
class ExampleMainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.testWidget = QtWidgets.QLabel('Test label, which should be transparent')
# Make sure the testWidget is transparent
self.testWidget.setStyleSheet('background: transparent')
self.testWidget.setAttribute(Qt.WA_TranslucentBackground, True)
self.testWidget.setAutoFillBackground(True)
self.setStyleSheet('background: rgba(255, 255, 255, 0.8)')
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.setAutoFillBackground(True)
#self.setWindowFlags(Qt.FramelessWindowHint) # Doesn't seem to help
self.setCentralWidget(self.testWidget)
def main():
global app, exWindow
app = QtWidgets.QApplication(sys.argv)
exWindow = ExampleMainWindow()
exWindow.show()
exitcodesys = app.exec_()
app.deleteLater()
sys.exit(exitcodesys)
if __name__ == '__main__': main()发布于 2014-12-08 08:50:23
您的样式表无效。Qt的rgba要求0-255范围内的整数或仅用于值的百分比。所以使用80%而不是0.8。再加上WA_TranslucentBackground,这应该会让你振作起来。
请在问题中发布您的代码,因为您的粘贴将在几天后过期,然后此问题将无法使用。
下面是为我工作的代码;我在下面看到了其他应用程序的窗口。我是C++。我使用的是Qt4而不是5;也许这很重要。
#include <QMainWindow>
#include <QApplication>
#include <QLabel>
class MyMain : public QMainWindow
{
Q_OBJECT
public:
MyMain(QWidget* parent = 0);
};
MyMain::MyMain(QWidget* parent)
: QMainWindow(parent)
{
setAttribute(Qt::WA_TranslucentBackground, true);
setStyleSheet("background: rgba(0,0,0,80%);");
QLabel* foo = new QLabel();
foo->setText("hello");
foo->setStyleSheet("color: white;");
setCentralWidget(foo);
}
#include "main.moc"
int main(int argc, char** argv)
{
QApplication app(argc, argv);
MyMain m;
m.show();
return app.exec();
}https://stackoverflow.com/questions/27346819
复制相似问题