2011-11-30 10 views
12

Czy istnieje sposób utworzenia zupełnie nowej instancji okna, jako okna podrzędnego głównego okna QML w aplikacji QmlApplication?Jak mogę utworzyć nowe okno z poziomu QML?

// ChildWindow.qml 
Rectangle { 
    id: childWindow 
    width: 100 
    height: 100 
    // stuff 
} 

// main.qml 
Rectangle { 
    id: window 
    width: 1000 
    height: 600 

    MouseArea { 
     anchors.fill: parent 
     onClicked: createAWindow(childWindow); 
    } 
} 

Staram się unikać pisania klasę Q_OBJECT tylko dla instanciating nowe okno w nowej QmlApplicationViewer.

Odpowiedz

1

Nie ma możliwości utworzenia okna najwyższego poziomu przy użyciu tylko wbudowanej funkcji QML.

Istnieje jednak projekt na Qt Labs o nazwie Desktop Components, który zawiera między innymi Window component, który pozwala na tworzenie nowych okien najwyższego poziomu.

+0

Wygląda super, dziękuję. Następnym krokiem byłoby poszukiwanie tych Komponentów pulpitu, ponieważ i tak ich potrzebuję. Nie sądzę, że oni też robiliby nowe okna;) – opatut

20

Możesz to zrobić za pomocą Qt.createComponent. Przykład (przy użyciu Qt 5.3):

main.qml

import QtQuick 2.3 
import QtQuick.Controls 1.2 

ApplicationWindow { 
    id: root 
    width: 200; height: 200 

    Button { 
     anchors.centerIn: parent 
     text: qsTr("Click me") 

     onClicked: { 
      var component = Qt.createComponent("Child.qml") 
      var window = component.createObject(root) 
      window.show() 
     } 
    } 
} 

Child.qml

import QtQuick 2.3 
import QtQuick.Controls 1.2 

ApplicationWindow { 
    id: root 
    width: 100; height: 100 

    Text { 
     anchors.centerIn: parent 
     text: qsTr("Hello World.") 
    } 
} 
+0

Wewnątrz głównej otrzymuję ten błąd "qrc: ///main.qml: 59: ReferenceError: root nie jest zdefiniowany", kiedy klikam przycisk "Kliknij mnie"? – User

+0

Działa zgodnie z oczekiwaniami tutaj, gdy próbuję go z qmlscene main.qml. – Kknd

+0

Używam QT 5.3.1 i mam QtQuick 2.2, QtQuick.Controls 1.1 instaed urs 2.3 i 1.2. Czy to jest problem? – User

Powiązane problemy