14

私は自分のチームと一緒にプロジェクトに取り組んでいます。私の仕事は、組み込みシステム用の QML と C++ を使用して GUI を作成することです。

ビューごとにqmlファイルがあります。

しかし今、私はそれらの間をナビゲートしたいと思っています。これは、ボタンをクリックすると、ビューが切り替わることを意味します。すべてのビューには戻るボタンがあるため、メイン ビューに戻ることができます。

これはqmlで可能ですか?そうでない場合は、C ++で解決する必要があります

4

3 に答える 3

15

QDeclarativeViewC++から派生したクラスを作成し、以下を使用できます。

void setSource ( const QUrl & url )

現在表示されているqmlファイルを変更します。ボタンがクリックされたときに、このメソッドを複数回呼び出すことができます。


QML のみを使用したソリューションもあります。Loader要素を見てみましょう。

 import QtQuick 1.0
 Item {
   width: 200; height: 200

   Loader { id: pageLoader }

   MouseArea {
     anchors.fill: parent
     onClicked: pageLoader.source = "Page1.qml"
   }
 }
于 2012-09-26T13:04:45.650 に答える
11

もう 1 つのオプションは、これらの qml ビューをインスタンス化するメインの qml を用意し、状態を使用してそれらの間を変更することです。

Main {
  View1{id:viewid1}
  View2{id:viewid2}
  View3{id:viewid3}
  states: [
    State {
        name: ""
    },
    State {
        name: "view1"
        PropertyChanges {target: viewid1; state: "focused"}
    },
    State {
        name: "view2"
        PropertyChanges {target: viewid2; state: "focused"}
     ...
    }
  ]
}

これらのオプションと既に提示されているオプションの違いは、これは永続的であり、もう一方は毎回 QML を請求することです (つまり、解析とインスタンス化を意味します...)。

于 2012-09-27T10:27:13.967 に答える
6

もう1つの例

import QtQuick 2.1
import QtQuick.Controls 1.1
import QtQuick.Window 2.1

ApplicationWindow {
    title: qsTr("My super app")
    width: 640
    height: 480

    Button {
        id: settingsButton
        x: 370
        y: 0
        text: qsTr("Settings")
        /* just change `visible` property by click */
        onClicked: {
            statusView.visible     = false
            settingsView.visible   = true
        }
    }

    Button {
        id: statusButton
        x: 171
        y: 0
        text: "Status"
        /* toggle */
        onClicked: {
            statusView.visible     = true
            settingsView.visible   = false
        }
    }

    Item {
        /* use id for access */
        id: statusView
        x: 0
        y: 50
        width: 640
        height: 430
        /* visible: true */

        Text {
            anchors.centerIn: parent
            text: "status"
        }
    }

    Item {
        id: settingsView
        x: 0
        y: 50
        width: 640
        height: 430
        /* invisible */
        visible: false

        Text {
            anchors.centerIn: parent
            text: "settings"
        }
    }
}
于 2014-10-17T17:02:26.593 に答える