Macos 使用Qt创建OS X Yosemite半透明效果
我们正在尝试制作一个带有Mac OSX Yosemite半透明效果的QMainWindow。我们正在使用PyQt,但问题是Qt问题。到目前为止,我们已经尝试过,它总是完全透明或完全不透明(就像普通窗口)。如果启用Qt.WA_半透明背景,窗口背景将变为100%完全透明。Macos 使用Qt创建OS X Yosemite半透明效果,macos,qt,translucency,Macos,Qt,Translucency,我们正在尝试制作一个带有Mac OSX Yosemite半透明效果的QMainWindow。我们正在使用PyQt,但问题是Qt问题。到目前为止,我们已经尝试过,它总是完全透明或完全不透明(就像普通窗口)。如果启用Qt.WA_半透明背景,窗口背景将变为100%完全透明。 此外,我们在上面显示的QGraphicsView在滚动时会留下痕迹。鼠标输入也“通过”透明部分-点击图形视图的透明部分将注册为点击其后面的窗口。使用任何自定义背景色设置样式表都没有效果。如果我们关闭它,窗口将保持不透明。然后我们可
此外,我们在上面显示的QGraphicsView在滚动时会留下痕迹。鼠标输入也“通过”透明部分-点击图形视图的透明部分将注册为点击其后面的窗口。使用任何自定义背景色设置样式表都没有效果。如果我们关闭它,窗口将保持不透明。然后我们可以使用样式表更改背景色,但它仍然是不透明的
# 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()
您的样式表无效。Qt的rgba要求值的范围为0-255的整数或百分比。因此,使用80%而不是0.8。加上WA_半透明的背景,应该会让你行动起来 请在问题中发布您的代码,因为您的粘贴将在几天后过期,此问题将无法使用 这是为我工作的代码;我在下面看到其他应用程序的窗口。它是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();
}
#包括
#包括
#包括
类MyMain:公共QMainWindow
{
Q_对象
公众:
MyMain(QWidget*parent=0);
};
MyMain::MyMain(QWidget*父项)
:QMainWindow(父级)
{
setAttribute(Qt::WA_半透明背景,true);
设置样式表(“背景:rgba(0,0,0,80%);”;
QLabel*foo=新的QLabel();
foo->setText(“你好”);
foo->setStyleSheet(“颜色:白色;”);
setCentralWidget(foo);
}
#包括“main.moc”
int main(int argc,字符**argv)
{
QApplication应用程序(argc、argv);
MyMain m;
m、 show();
返回app.exec();
}
代码有时价值千言万语。我不知道如何将代码嵌入到帖子中,所以这里是一篇文章:关于格式化代码的一些提示:。因此,帮助我完成此项目的人制作了一个Python示例程序来测试这一点。这是代码:这是输出:这是我们尝试使用的代码类型的一个示例-我们只希望它具有优胜美地的“磨砂玻璃”外观。如果我将其设置为百分比(例如“80%”),而没有将WA_半透明背景设置为True,则它只有灰度(无法穿透下面的窗口)-但是,如果我将WA_半透明背景设置为True,它是完全透明的,我甚至可以单击它下面的窗口:>是否有一种已知的方法可以让它看起来像“磨砂玻璃”而不是简单的半透明?我今天试着运行它,但它给出的错误是找不到QMainWindow。你能帮我吗?另外,你能不能截图让我看看你的输出是什么样子?如果你使用Qt5,你需要QT+=QtWidgets在项目文件中。这是我的截图:你发送的SS看起来不错-但是,它看起来没有磨砂玻璃的外观(尽管它看起来不像你在使用约塞米蒂)。你知道吗?这是约塞米蒂的截图。不,它没有你想要的样子;我希望您需要在自己的应用程序中添加纹理背景,而不是普通的rgba(0,0,0,80%)。