在哪里放Qt QML非可视应用程序组件

And*_*nko 5 qt qml qt-quick

(我正在使用Qt 5,QtQuick 2,带控件.)

我正在编写我的第一个QML应用程序,并希望保持模块化和相对较小的文件长度.

有些东西大批量出现,我想收集到帮助文件中,但我不确定这样做的正确方法.

我到目前为止遇到的两个例子是FontLoaderAction.

在我的特殊情况下,我将在我的整个应用程序中使用6种字体,所以我想尽早加载它们,而不必再担心它.我的问题是,我应该把它放在哪里FontLoader

一种选择是将它们放在main.qml某个地方,但这对我来说感觉有点混乱.我所做的是创建了一个文件FontLoaders.qml,其中包含:

Item {
    width: 0; height: 0
    FontLoader {
        name: "myFont1"
        source: "/fonts/myFont1.ttf"
    }
    FontLoader {
        name: "myFont2"
        source: "/fonts/myFont2.ttf"
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后,在main.qml某个地方,我只有一个FontLoaders {}.

我的另一个例子是Action.我有一大堆Actions,我希望在应用程序范围内或多或少可见.我有一个AppMenuBar组件,这似乎是放置Actions 的自然场所,但这基本上是定义菜单栏的QML文件大小的两倍,从逻辑上讲,这两个可以分开.(许多操作都可以通过菜单栏和应用程序中的其他按钮访问.)

我已基本上工作的"解决方案",但他们对我(特别是FontLoaders)感到邋,,我想知道是否有一些更清洁的方法来做到这一点,我还没有想到.

erv*_*her 6

我有类似的问题.我确实看了一下Qt的一些来源,并认为你可以这样做:

pragma Singleton

import QtQuick 2.0
QtObject {

    property FontLoader fontLatoBlackLoader: FontLoader {
        name: "fontLatoBlack"
        source: "qrc:/fonts/Lato-Black.ttf"
    }
}
Run Code Online (Sandbox Code Playgroud)

在你说的fonts.qml文件中然后在应用程序中你只需:

Label {
    text: "Sample tesxt"
    font.family: Fonts.fontLatoBlackLoader.name
}
Run Code Online (Sandbox Code Playgroud)

您不必实例化Fonts对象.它只存在于全球.

希望有所帮助.我花了几个小时自己解决这个问题,因为我有同样的邋iness /丑陋问题:)