【问题标题】:QtQuick simple app for Raspberry用于覆盆子的 QtQuick 简单应用程序
【发布时间】: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 是否适合我。

标签: qt qml qt-quick


【解决方案1】:

我冒昧地猜测您很可能想在树莓派上使用 Qt5 的 eglfs 模式。这摆脱了普通桌面并全屏运行您的 Qt5(常规或 QML)应用程序。当我上次这样做时,我需要自己编译 Qt5。那是你要么想弄清楚交叉编译的东西,要么使用 RaspberryPi 3(如果需要,可以将结果复制到速度较慢的 Raspberry Pi)。我在https://wiki.qt.io/RaspberryPi2EGLFS 的指南中工作

然后在 linux 桌面上的窗口或带触摸屏(特殊的 7" 屏幕或通用 22" 触摸屏)的 Raspberry Pi 上全屏运行程序非常简单。

使用 eglfs 的一种新的替代方法显然是 QtWayland 合成器。我没有使用过它,但是有一个有趣的演示文稿将它用于最新 (2017) FOSDEM 的全屏嵌入式应用程序,可在此处获得:https://fosdem.org/2017/schedule/event/device_specific_compositors/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多