(我正在使用Qt 5,QtQuick 2,带控件.)
我正在编写我的第一个QML应用程序,并希望保持模块化和相对较小的文件长度.
有些东西大批量出现,我想收集到帮助文件中,但我不确定这样做的正确方法.
我到目前为止遇到的两个例子是FontLoader和Action.
在我的特殊情况下,我将在我的整个应用程序中使用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)感到邋,,我想知道是否有一些更清洁的方法来做到这一点,我还没有想到.
我有类似的问题.我确实看了一下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 /丑陋问题:)