2013-02-08 16 views
8

Próbuję utworzyć prosty interfejs Qt z bezramkowym oknem i zaokrąglonymi narożnikami. Począwszy od nowego projektu z QtQuick 2 Zastosowanie szablonu, mój kod wygląda następująco:Qt5 i QtQuick2 - przezroczyste okno główne

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(); 
     } 
    } 
} 

I to wynik:

And this is the result

Co mam zrobić, to pozbyć się białych narożników, przez co okno główne stanie się przezroczyste. Jednak, o ile mogę powiedzieć, nie ma w Qt5 sposobu, aby to zrobić, ponieważ nie mamy arkuszy stylów itp. I nie używam QtWidget. Czy powinienem używać QtWidget?

Przy okazji, jestem nowy w Qt i Qt5.

+0

Wygląda na to, że można rozwiązać ten problem w 5.1, tworząc widget jako okno kontenera za pomocą 'QWidget :: createWindowContainer()'. Zobacz [raport o błędzie] (https://bugreports.qt-project.org/browse/QTBUG-25643) i [commit] (https://codereview.qt-project.org/#change,44285). Zamierzam spróbować skompilować 5.1 ze źródła i sprawdzić, czy mogę go uruchomić. – andrewrjones

+0

Poinformujmy, proszę, proszę –

+0

@andrewrjones Możesz odpowiedzieć i zaakceptować własne pytanie. –

Odpowiedz

4

działa to dla mnie und er Windows 8 i Ubuntu 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

Dzięki Marcus! To tyle. Na Macu wystarczy dodać 'visible: true' do okna i' radius: 10' do prostokąta, a otrzymam dokładnie to, co chciałem. Przesłano to jako przykładowy projekt do GitHub: https://github.com/andrewrjones/qt-transparent-main-window – andrewrjones

+0

Doskonale, cieszę się, że się udało. :) A dzięki za wzmiankę o mnie w repozytorium. –

-2

ustawić tło jasny kolor mieć alfa 0 na widza aplikacji:

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

To nie działa z Qt 5.0. Dostajesz czarne tło, a nie przezroczyste. – nixeagle

-1

Musisz użyć
viewer.setMask()
aby powiedzieć QT widżet wyświetlający QML gdzie się zwrócić i gdzie nie ....

używałem głównie prostokątne maski ale setMask akceptuje QRegion który myślę obsługuje skomplikowane formy, a nawet maski bitmapy

Powiązane problemy