2013-02-08 6 views
8

프레임없는 창과 둥근 모서리가있는 간단한 Qt UI를 만들려고합니다.Qt5 및 QtQuick2 - 투명한 기본 창

MAIN.CPP

#include <QtGui/QGuiApplication> 
#include "qtquick2applicationviewer.h" 

int main(int argc, char *argv[]) 
{ 
    QGuiApplication app(argc, argv); 

    QtQuick2ApplicationViewer viewer; 

    viewer.setMainQmlFile(QStringLiteral("qml/qtquick-test/main.qml")); 
    viewer.setFlags(Qt::FramelessWindowHint); 
    viewer.showExpanded(); 

    return app.exec(); 
} 

main.qml

import QtQuick 2.0 

Rectangle { 
    width: 360 
    height: 360 
    radius: 10 
    color: "red" 

    Text { 
     text: qsTr("Hello World") 
     anchors.centerIn: parent 
    } 
    MouseArea { 
     anchors.fill: parent 
     onClicked: { 
      Qt.quit(); 
     } 
    } 
} 

그리고이 다음 QtQuick이 응용 프로그램 템플릿을 새 프로젝트에서 시작, 내 코드는 다음과 같습니다 그 결과 :

And this is the result

메인 윈도우를 투명하게 만들어서 흰색 모서리를 제거하는 것이 좋습니다. 그러나 Qt5에는 스타일 시트가 없기 때문에 QtWidget을 사용하지 않으므로 말할 필요가 없습니다. QtWidget을 사용해야합니까?

Btw, Qt와 Qt5를 처음 사용했습니다.

+0

위와 같은 현상은 5.1에서'QWidget :: createWindowContainer()'를 사용하여 컨테이너 창으로 위젯을 생성 한 것으로 보입니다. [버그 리포트] (https://bugreports.qt-project.org/browse/QTBUG-25643)와 [commit] (https://codereview.qt-project.org/#change,44285)를보십시오. 소스에서 5.1을 컴파일하고 컴파일하여 작동시킬 수 있는지 알아 봅니다. – andrewrjones

+0

우리가 알기로하자 –

+0

@andrewrjones 답변을하고 자신의 질문에 동의 할 수 있습니다. –

답변

4

이 싶게 나를 위해 작동 어 Windows 8과 우분투 12.04.

import QtQuick 2.3 
import QtQuick.Window 2.2 

Window { 
    width: 300 
    height: 300 
    flags: Qt.FramelessWindowHint | Qt.Window 
    color: "transparent" 

    Rectangle { 
     color: "brown" 
     anchors.fill: parent 
     anchors.margins: 10 
    } 
} 
+0

고마워 마커스! 그것은 꽤 많이 있습니다. Mac에서는 Window에'visible : true'를 추가하고 Rectangle에'radius : 10'을 추가하면됩니다. 그러면 원하는만큼 정확하게 얻을 수 있습니다. GitHub에 대한 예제 프로젝트로 업로드했습니다 : https://github.com/andrewrjones/qt-transparent-main-window – andrewrjones

+0

우수하고 기뻤습니다. :) 그리고 Repo에서 나를 언급 해 주셔서 감사합니다. –

-2

설정 배경 투명 색상 응용 프로그램 뷰어에 0의 알파를해야합니다 :

viewer.setColor(QColor(0, 0, 0, 0)); 
+2

Qt 5.0에서는 작동하지 않습니다. 투명 한 것이 아니라 검은 배경이됩니다. – nixeagle

-1

을 당신이 그리는 방법과 장소 QML을 표시하는 QT 위젯을 이야기하기 위해
viewer.setMask()
을 사용해야합니다 하지 ....

내가 주로 직사각형 마스크를 사용했지만에 setMask 내가 지원하는 더 복잡한 형태, 심지어 비트 맵 마스크를 생각 QRegion을 허용하는