QML меняют представления при клике

Я работаю над проектом со своей командой.
Моя работа заключается в создании Gui с QML и C ++ для встраиваемых систем.

У меня есть для каждого просмотра qml-файла.

Но теперь я хочу перемещаться между ними.
Это означает, что когда я нажимаю кнопку, вид должен переключаться.
У каждого просмотра будет кнопка возврата, чтобы я мог вернуться к своему основному виду.

Это возможно в qml?
Если нет, я должен решить это с C ++

9

Решение

Вы можете создать класс, производный от QDeclarativeView в C ++ и использовать:

void setSource ( const QUrl & url )

изменить файл qml, который отображается в данный момент. Вы можете вызвать этот метод несколько раз при нажатии кнопки.


Существует также решение, использующее только QML. Посмотрите на погрузчик элемент:

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

Loader { id: pageLoader }

MouseArea {
anchors.fill: parent
onClicked: pageLoader.source = "Page1.qml"}
}
12

Другие решения

Другой вариант — создать основной 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 (что означает анализ и создание экземпляров …).

10

Еще один пример

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"}
}
}
4
По вопросам рекламы [email protected]