2017-11-02 10 views
0

通常のQMLウィンドウからQtQuick UIファイルセット(ui.qmlおよび.qml)を表示するにはどうすればよいですか? 通常のQMLウィンドウクラスのQtQuick UIファイルを生成する

は大まかに、呼び出しがあり、私の親ウィンドウクラスから他のQMLのウィンドウを表示するには:

   var component = Qt.createComponent("SubWindow.qml") 
       var window = component.createObject(window) 
       window.show() 

私はQtQuickUISubwindow.ui.qmlとQtQuickUISubwindow.qml、どちらも作品の両方を呼び出して試してみました。

QtQuickUIファイルはサブウィンドウではありませんか?

+0

** 1。**なぜQMLで行うことができるときに、JSでウィンドウを作成するのですか? ** 2。**いいえ、QtQuickUIファイルはルート要素として 'Window'または' ApplicationWindow'を持つことはできません。 (* .ui.qmlファイルのルート要素を 'Window'に手動で変更してデザイナーで開き、[Error M220](http://doc.qt.io/qtcreator/creator-checking- code-syntax.html)*)。 – derM

+0

[** here **](http://doc.qt.io/qtcreator/creator-quick-ui-forms.html)も参照してください:* "以下の機能はサポートされていません:[...]ルート項目QQuickItemやItemから派生したものではありません。] "* – derM

答えて

1

WindowおよびApplicationWindowは、Item(またはQQuickItem)ではありません。しかし、これは内ルートアイテムとして配置されるための要件である.ui.qml -file stated in the documentationとして次の機能がサポートされていない

  • [...]
  • ルートアイテムをそのQQuickItemまたは項目に由来しない

だから、答えは:

いいえ、QtQuickUIファイルは、ウィンドウとしてもサブウィンドウとしても使用できません。


あなたはしかし、簡単に

// main.qml

Window { 
    id: root 
    width: 800 
    height: 600 
    visible: true 
    Loader { // creates my sub window without JS 
     id: winLoader 
     active: false // Change to create the window. 
     sourceComponent: Window { 
      width: srcLoader.item ? srcLoader.item.width : 0 
      height: srcLoader.item ? srcLoader.item.height : 0 
      visible: srcLoader.item 
      Loader { 
       id: srcLoader 
       source: "QtQuickUISubwindow.ui.qml" // Your ui.qml-file *here* 
       active: true 
      } 
      onClosing: winLoader.active = false 
     } 
    } 
    Button { 
     text: "Show sub window!" 
     onClicked: winLoader.active = true 
    } 
} 

サブウインドウ内でそれらをを使用することができます。このコードは、私がテストされていません。後でQtマシンにアクセスした後に、私はあとでやります。リピータで複数のウィンドウを初期化するとListModelはあなたがここに見つけることができる方法:https://stackoverflow.com/a/47018205/2056452

あなたは、モデルへのsrcLoadersourceを渡し、あなたが複数の異なるウィンドウを開きたい場合はそこからそれを読むかもしれません。


あなたはOFC QtQuickUISubwindow.qml -fileを変更し、ルート要素として適切なサイズのWindowまたはApplicationWindowを追加することができます。その後、JSを使って、以前と同じようにすべてを作成することができ、ガベージコレクタがうまく動作することを願っています。

+0

QMLコードを試しましたが、それを動作させることができませんでした。ドキュメントの仕様は本当に正しい答えです。 – Austin

+0

ルートウィンドウを表示するのを忘れてしまいました。 'ui.qml'ファイルの別の名前です。次に、' Loader'を起動するためのボタンも追加しました。 – derM

関連する問題