2011-11-30 21 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

関連する問題