【问题标题】:Using Qt to create the OS X Yosemite Translucency effect使用 Qt 创建 OS X Yosemite 半透明效果
【发布时间】:2014-12-07 19:25:47
【问题描述】:

我们正在尝试使用 Mac OSX Yosemite 半透明效果制作 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()

【问题讨论】:

标签: macos qt translucency


【解决方案1】:

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

【讨论】:

  • 如果我将其设置为百分比(例如,'80%')而不将 WA_TranslucentBackground 设置为 True,它只有灰度(看不到下面的窗口) - 但如果我将 WA_TranslucentBackground 设置为 True ,它是完全透明的,我什至可以点击它下面的窗口:dropbox.com/s/yfbj5cabzl0gwb7/…> 有没有一种已知的方法可以让它看起来像“磨砂玻璃”而不是简单的半透明?
  • 我今天尝试运行它,它给出了找不到QMainWindow的错误。你能帮我解决这个问题吗?另外,你能把你的输出截图给我看看吗?
  • 如果你使用Qt5,你需要在项目文件中使用QT += QtWidgets。这是我的截图:i57.tinypic.com/2rystjk.png
  • 您发送的 SS 看起来不错 - 但是,它似乎没有磨砂玻璃的外观(尽管它看起来不像您使用的是 Yosemite)。这段代码会让优胜美地看起来像毛玻璃,你知道吗?
  • 这是 Yosemite 的截图 - i58.tinypic.com/2lvk3vd.jpg 。不,它没有您想要的外观;我希望您需要在自己的应用程序中放置带纹理的背景,而不是普通的 rgba(0,0,0,80%)。
猜你喜欢
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
相关资源
最近更新 更多