【发布时间】:2017-05-05 16:38:00
【问题描述】:
我是 QT 新手,想为 raspberry pi 及其触摸 LCD 显示屏开发一个 QT Quick 应用程序。该应用程序应该有几个屏幕(抱歉,不确定正确的术语是什么,屏幕是指应用程序的状态,它填充了 Raspberry Pi 的整个显示)并且应该有按钮可以在这些屏幕之间切换。当我按下按钮时如何切换到不同的屏幕?
我尝试使用加载器,但(现在我在桌面而不是 Raspberry 上测试)它会在新窗口中打开 qml 文件,但我想替换原始窗口的内容。
编辑: 是的,我计划使用 EGLFS。我附上了一些原则上我想要的代码。但是,我不确定这是否是正确的做事方式:我将我想要拥有的屏幕放入他们自己的 qml 文件中,并通过我们的鼠标区域按钮切换它们的可见性:
main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
ApplicationWindow {
visible: true
width: 800
height: 460
title: qsTr("Hello World")
Page1 {
id: page1
visible: true
}
Page2 {
id: page2
visible: false
}
}
Page1.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
Item {
Button {
id: button1
width: 200
height: 40
text: qsTr("To second page")
onClicked: {
page2.visible=true
page1.visible=false
}
}
}
Page2.qml
import QtQuick 2.3
import QtQuick.Window 2.2
Item {
Text {
id: text1
x: 181
y: 153
text: qsTr("Second Page")
font.pixelSize: 12
}
Rectangle {
id: rectangle
x: 252
y: 222
width: 200
height: 200
color: "#000000"
border.color: "#f12525"
}
MouseArea {
id: mouseArea
x: 234
y: 209
width: 244
height: 225
onClicked:{
page1.visible=true
page2.visible=false
}
}
}
【问题讨论】:
-
你可以显示你的代码,也请在你的问题中准确,首先你在桌面之后谈论树莓,考虑两者的qt版本,通常它会工作但对于版本问题你不会拥有覆盆子中的所有组件。
-
我没有发布代码,因为我现在对采用哪种方法感到迷茫。使用 Quick Controls 有诸如 StackView 之类的东西,这合适吗?还是使用 Loader 或 States 更容易?关于 Raspberry 和 Desktop:最终应用程序应该在 Raspberry 上运行,但现在我正在我的桌面上开发。我刚刚提到它是因为我使用的加载器方法的一个问题是打开了新窗口,但在 Raspberry 上这可能会有所不同。
-
您的问题很宽泛,这与 SO 无关,请阅读 this 以改进您的问题。
-
您的一些代码确实会有所帮助,因为您很可能在加载的组件中有一个
Window-descendant 作为根节点,这可能是偶然的吗? -
我之前尝试的方式为每个 screen/qml 文件都有一个窗口,这可能就是为什么当我将 mouseArea 连接到加载器时总是打开新窗口的原因。在上面的示例中,我使用 QuickControls 中的 ApplicationWindow,但是,我不确定 QuickControls 或纯 Quick 是否适合我。