1
リファクタリングしようとしているより大きなQMLプロジェクトがあります。そのため、関連するコンポーネントがそれぞれのファイルに含まれています。私の単純化した例では、の一部であるThingManager.qmlは以前はmain.qmlファイルに単純に含まれていました。リファクタリング、IDSの範囲、、B前に、それらがメインファイルに定義されたので、Cはpage.qmlに見えました。私はあることを考えるとQMLをリファクタリングしてスコープ内にコンポーネントを保持する
page.qml:9: ReferenceError: a is not defined
:私は私のmain.qmlに混乱を減らすためにThingManagerコンポーネントにこれらの抽象化しようとしたとして、page.qmlはもう慣れスコープエラーを有するものを参照することができませんでしたpage.qmlに似たページを読み込み、別のファイルに格納されたこれらのコンポーネント内のメソッドを実行したい場合は、page.qmlがmainで定義されていないメソッドをこれらのコンポーネントにアクセスできるように.qml?それとも単純にできないのでしょうか?
main.qml:
import QtQuick 2.7
import QtQuick.Controls 2.1
import QtQml 2.2
ApplicationWindow {
id: window
ThingManager { }
Loader {
id: page_loader
}
Component.onCompleted: {
page_loader.setSource("page.qml")
}
}
ThingManager.qml:
import QtQuick 2.7
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.3
Item {
Column {
Button {
id: a
text: "A"
}
Button {
id: b
text: "B"
}
Button {
id: c
text: "C"
}
}
}
page.qml:
import QtQuick 2.7
import QtQuick.Controls 2.1
Page {
id: page
Component.onCompleted: {
console.log("Execute A's method")
a.toggle()
}
}
あなたはThingManager' 'にIDを追加してA' ThingManager.qml''でプロパティとして 'エイリアスを定義する必要があります。 – m7913d
ありがとう、ありがとう!それは私が必要とした組み合わせでした。私はプロパティエイリアスを適用しようとしていましたが、他のエラーの原因となったインスタンス化ではなく、ThingManager.qmlにidを配置しました。残念ながら、私は答えとしてあなたのコメントを記入する特権を持っていない、そうでなければ私はそうするでしょう。あなたのコメントへの帰属として答えとして更新されたコードを投稿することができます。 – ohporter
解決策のスケッチを含めて、答えとして追加しました。 – m7913d