2013-02-08 4 views
8

Sto cercando di creare un'interfaccia utente Qt semplice con una finestra senza cornice e angoli arrotondati. Partendo da un nuovo progetto con l'applicazione modello QtQuick 2, il mio codice è simile al seguente:Qt5 e QtQuick2 - finestra principale trasparente

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

E questo è il risultato:

And this is the result

Quello che non voglio fare è eliminare gli angoli bianchi, rendendo trasparente la finestra principale. Tuttavia, per quanto posso dire, non c'è modo in Qt5 di farlo, perché non abbiamo fogli di stile, ecc. E non sto usando un QtWidget. Dovrei usare un QtWidget?

Btw, sono nuovo di Qt e Qt5.

+0

Sembra che questo possa essere risolto in 5.1 creando un widget come finestra del contenitore usando 'QWidget :: createWindowContainer()'. Vedi la [segnalazione bug] (https://bugreports.qt-project.org/browse/QTBUG-25643) e [commit] (https://codereview.qt-project.org/#change,44285). Proverò a compilare 5.1 dalla fonte e vedere se riesco a farlo funzionare. – andrewrjones

+0

Facciamo sapere per favore –

+0

@andrewrjones Puoi rispondere e accettare la tua stessa domanda. –

risposta

4

Questo funziona per me und er Windows 8 e 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

Grazie Marcus! Questo è praticamente tutto. Su Mac, ho solo dovuto aggiungere "visibile: true" alla finestra e "raggio: 10" al rettangolo e ottengo esattamente quello che volevo. Caricato come progetto di esempio su GitHub: https://github.com/andrewrjones/qt-transparent-main-window – andrewrjones

+0

Eccellente, felice ha funzionato. :) E grazie per avermi menzionato nel tuo repository. –

-2

Impostare il colore chiaro di sfondo ad avere un alfa pari a 0 sul visualizzatore applicazione:

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

Questo non funziona con Qt 5.0. Ottieni uno sfondo nero, non trasparente. – nixeagle

-1

Devi usare
viewer.setMask()
per raccontare il widget qt che visualizza la QML dove disegnare e dove non ....

ho usato per lo più maschere rettangolari ma setMask accetta un QRegion che credo supporti forme più complesse e persino maschera bitmap