2014-12-07 2 views
2

우리는 Mac OSX Yosemite 반투명 효과를 사용하여 QMainWindow를 만들려고합니다. 우리는 PyQt를 사용하고 있지만 문제는 Qt 문제입니다. 지금까지 시도한 바에 따르면 항상 투명하거나 완전하게 불투명합니다 (일반 창처럼). Qt.WA_TranslucentBackground를 켜면 창 배경이 완전히 투명 해집니다.
또한 QGraphicsView가 표시되면 스크롤 할 때 흔적이 남습니다. 또한 마우스 입력은 투명 파트를 "통과"합니다. 그래픽보기의 투명한 부분을 클릭하면 그 뒤에있는 창에 클릭으로 등록됩니다. 사용자 정의 배경색으로 스타일 시트를 설정하면 효과가 없습니다. 이 기능을 끄면 윈도우가 불투명하게 유지됩니다. 그런 다음 스타일 시트를 사용하여 배경색을 변경할 수 있지만 여전히 불투명합니다.
WA_FramelessWindowHint를 켜고 끄는 것이 아무것도 수정하지 않는 것 같습니다. setAutoFillBackground()도 마찬가지입니다. 요세미티 반투명 효과로 창문을 만드는 방법을 알고 있습니까?Qt를 사용하여 OS X Yosemite 반투명 효과 만들기

다음은이를 테스트 할 수있는 샘플 파이썬 프로그램입니다 : -

# 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() 
+1

코드는 때로는 천 단어 정도의 가치가 있습니다. – lpapp

+0

게시글에 코드를 삽입하는 방법을 모르므로 여기는 pastie입니다. https://bpaste.net/show/b0fbe94e90ce – Meorge

+0

코드 서식 지정에 대한 유용한 정보 : http://stackoverflow.com/ 도움말/서식 지정. –

답변

0

스타일 시트가 유효하지 않습니다. Qt의 rgba는 0-255 범위의 정수 또는 값에 대해서만 백분율을 예상합니다. 따라서 0.8 대신 80 %를 사용하십시오. 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(); 
} 
+0

WA_TranslucentBackground를 True로 설정하지 않고 백분율 (예 : '80 % ')로 설정하면 그레이 스케일 (윈도우 밑으로는 보이지 않음) 만 있습니다. 그러나 WA_TranslucentBackground를 True로 설정하면 완전히 투명 해집니다. 심지어 아래의 창을 클릭 할 수 있습니다 : https://www.dropbox.com/s/yfbj5cabzl0gwb7/Screenshot%202014-12-07%2017.29.18.png?dl=0
또한 제공 할 수있는 알려진 방법이 있습니까? 단순한 반투명 대신 '젖빛 유리'모양을 보여 주나요? – Meorge

+0

오늘이 프로그램을 실행 해 보았는데 QMainWindow를 찾을 수 없다는 오류가 발생했습니다. 그걸 도와 줄 수있어? 또한 출력물의 스크린 샷을 찍어서 어떻게 생겼는지 확인할 수 있습니까? – Meorge

+0

Qt5를 사용하는 경우 프로젝트 파일에 QT + = QtWidgets가 필요합니다. 여기 내 스크린 샷이 있습니다. http://i57.tinypic.com/2rystjk.png –