2011-11-30 10 views
12

QmlApplication의 기본 QML 창의 자식 창으로 완전히 새로운 창 인스턴스를 만드는 방법이 있습니까?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); 
    } 
} 

난 그냥 새로운 QmlApplicationViewer 내에서 새 창을 instanciating에 대한 Q_OBJECT 클래스를 작성하지 않도록 노력하고 있어요.

답변

1

내장 된 QML 기능 만 사용하여 최상위 창을 만드는 방법은 없습니다.

Qt Labs의 Desktop Components이라는 프로젝트가 있습니다.이 중 Window component이 포함되어 있으며, 새로운 최상위 창을 만들 수 있습니다.

+0

, 감사합니다. 필자의 다음 단계는 필자가 필요하기 때문에 이러한 데스크탑 구성 요소를 검색하는 것이 었습니다. 그들은 새로운 창도 할 것이라고 생각하지 않았다;) – opatut

20

Qt.createComponent를 사용하여 수행 할 수 있습니다. 예 (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

메인 내에서 나는 "qrc : ///main.qml : 59 : ReferenceError : 루트가 정의되지 않았다"라는 오류가 발생했습니다. – User

+0

qmlscene main.qml로 시도하면 예상대로 실행됩니다. – Kknd

+0

QT 5.3.1을 사용하고 있으며 QtQuick 2.2, QtQuick.Controls 1.1 instaed urs 2.3 및 1.2가 있습니다. 이것이 문제입니까? – User

관련 문제