Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 使用Qt创建OS X Yosemite半透明效果_Macos_Qt_Translucency - Fatal编程技术网

Macos 使用Qt创建OS X Yosemite半透明效果

Macos 使用Qt创建OS X Yosemite半透明效果,macos,qt,translucency,Macos,Qt,Translucency,我们正在尝试制作一个带有Mac OSX Yosemite半透明效果的QMainWindow。我们正在使用PyQt,但问题是Qt问题。到目前为止,我们已经尝试过,它总是完全透明或完全不透明(就像普通窗口)。如果启用Qt.WA_半透明背景,窗口背景将变为100%完全透明。 此外,我们在上面显示的QGraphicsView在滚动时会留下痕迹。鼠标输入也“通过”透明部分-点击图形视图的透明部分将注册为点击其后面的窗口。使用任何自定义背景色设置样式表都没有效果。如果我们关闭它,窗口将保持不透明。然后我们可

我们正在尝试制作一个带有Mac OSX Yosemite半透明效果的QMainWindow。我们正在使用PyQt,但问题是Qt问题。到目前为止,我们已经尝试过,它总是完全透明或完全不透明(就像普通窗口)。如果启用Qt.WA_半透明背景,窗口背景将变为100%完全透明。
此外,我们在上面显示的QGraphicsView在滚动时会留下痕迹。鼠标输入也“通过”透明部分-点击图形视图的透明部分将注册为点击其后面的窗口。使用任何自定义背景色设置样式表都没有效果。如果我们关闭它,窗口将保持不透明。然后我们可以使用样式表更改背景色,但它仍然是不透明的 下面是一个示例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()

您的样式表无效。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%)。