1

我正在编写一个应用程序,我已经设法解决了一些问题,最新的是 Screen.Width/Height 用于在不同的显示器上动态调整窗口大小(我使用笔记本电脑、手机、PC,这很方便)。

为了有效且良好地编写代码,我想获取该特定信息并将其放入一组 2 个“变量”中,然后保存该信息。

我尝试为 ApplicationWindow 对象分配一个 id:mainWindow,以便从不同的 QML 文件中调用它,以获取属性值:mainWindow.height、mainWindow.width

然后我被告知使用另一种方法,自定义 QML 属性,其声明如下:

property (type) (name): (value)

然后我按照建议在 Main.qml(使用 AppWindow)中声明了这些属性,它确实有效。AppWindow(ApplicationWindow)的属性包含Screen的宽度和高度乘以一个特定的系数。

然后这些变量由对象本身访问,按照我想要的方式绘制应用程序窗口。

问题是这种方法旨在解决跨 .QML 文件共享代码的问题,但它并没有

[下去]

ApplicationWindow {
id: mainWindow
//Wide screen support
//Screen.desktopAvailableWidth / 4
//Screen.desktopAvailableHeight / 6

//The below is monitor cross-compatible (phone, PC, laptop)
property int globalWidth: Screen.width / 2
property int globalHeight: Screen.height / 3

width: globalWidth
height: globalHeight

visible: true
title: qsTr("Redacted")
//setWindowIcon(QIcon(":/path/to/icon.png"));

下面的代码位于 main.qml 中。它是从该文件中调用的。只是忽略 ID(ID 应该 [如用户/文档所述] 不能在本地范围之外访问......),属性(尤其是自定义属性)应该可以在 Page1、Page2、Page3 等内部访问。

    SwipeView {
    id: swipeView
    anchors.fill: parent
    currentIndex: tabBar.currentIndex

    Page1Form {
    }

    Page2Form {
    }

    Page3Form {
    }
}

下面是在 main.qml 中调用的 Page2Form.qml 文件(作为类定义)。main.qml (imo) 中父对象中声明的属性应该由子对象 (imo) 继承。

Page {
id: localPage2
width: globalWidth
height: globalHeight

Rectangle {
    id: rectangle

    x: (localPage2.width / 2) - (width / 2)
    y: (localPage2.height / 4) - (height / 2)
    width: localPage2.width / 3
    height: localPage2.height / 6

    color: "#ffffff"
    border.color: "#a45c5c"
    border.width: 2

    TextInput {
        id: textInput
        x: 0
        y: 0
        width: localPage2.width / 3
        height: localPage2.height / 6

        text: qsTr("Redacted")
        font.pixelSize: 12
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        font.weight: Font.Normal
        focus: true
    }
}

好的,那么问题是什么?我可以尝试将这些属性称为:

mainWindow.globalHeight

全局高度

主窗口高度

等等

他们不会被访问。表单编辑器将为我提供大小为 0 的 Page 对象的预览。该页面最终会呈现(编译和运行时),但在传递(访问)该属性的值时存在问题。

正如您所注意到的,ID 和自定义属性似乎都可以在本地正常工作。

更新: 我还没有解决这个问题,我也尝试过使用别名(参考),“外国”QML 文件仍然无法分配适当的大小(页面宽度和高度)。

然后我在其中放置了另一个字符串类型的自定义属性,其中包含一些文本,然后我设法在 Page2.qml 中访问该属性,并且该属性最初位于 main.qml 中。

它被窃听了,或者我不知道它是什么。

我尝试了 3 种方法:

  • ID(事实证明它不是全局的)
  • 自定义属性(一种作品,只是不与屏幕尺寸......)
  • 对象默认属性的别名(属性别名 globalWidth: mainWindow.width 属性别名 globalHeight: mainWindow.height)
4

0 回答 0