次のように、画像と関連するマウス領域があるQMLクイックフォームがあります。
// StatusBarForm.ui.qml
Image {
id: exitButton
width: 24
height: 24
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: 5
source: "images/exit.png"
MouseArea {
id: exitButtonMouseArea
anchors.fill: parent
}
}
さて、ドキュメントによると、ビジネスロジックを分離する必要があり、デザイナーはStatusBar.qml
フォームを作成し、追加しました:
exitButtonMouseArea.onClicked: {
Qt.quit()
}
今問題は、Mac で Qt 5.9 を使用してテストしたところ、動作しました (ただし、Qt の作成者は、それonClicked
を訴えるハンドラーを強調表示しましたexitButtonMouseArea identifier was not valid
。exitButton.exitButtonMouseArea.onClicked:
Linuxで試してみましたがQt 5.8
、アプリケーションが初期化されません。イベントハンドラーを削除しても問題ありませんが、もちろん画像を操作することはできません。
私の質問は、私の場合、UI ファイルの外部でビジネス ロジックを提供するにはどうすればよいかということです。
EDIT @derMの回答に続いて、次のことを行いました。
// StatusBarForm.ui.qml
Image {
id: exitButton
width: 24
height: 24
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: 5
source: "images/exit.png"
}
// StatusBar.qml
StatusBarForm {
property alias exitButton: exitButton
Image {
id: exitButton
MouseArea {
id: exitButtonMouseArea
anchors.fill: parent
onClicked: {
Qt.quit()
}
}
}
}
onClicked
コンポーネントが初期化されている間、イベントが発生しません。