0

次のように、画像と関連するマウス領域がある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 validexitButton.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コンポーネントが初期化されている間、イベントが発生しません。

4

1 に答える 1