是否可以创建 QML 组件库,其中所有 QML 文件都在二进制文件中,并且引擎仍然像 QtQuick 一样识别它?因此,所有的QML文件都使用
*.a
文件捆绑到二进制文件中(例如*.lib
,*.qrc
...),用户可以像这样导入库:
import Foo // Foo is library name
Bar { // Bar is component name.
// ...
}
就像您导入 QtQuick 一样,QML 引擎可以正常识别它,就像库有一个目录,其中有一个指向 QML 文件的
qmldir
文件。
我尝试将 QML 文件和
qmldir
文件放入 QRC 文件中,并添加作为 QML 引擎的 QRC 路径的导入路径,但没有成功。
注1:我的Qt版本是Qt 6.6.1。
注2:这是经过编辑的,有些人对我的问题有两种解释,它们都是错误的,这不是他的错,不清楚,所以我改变了措辞。
[编辑] 我对你的问题有两种解释。
第一个解释。您可以将组件分组到一个文件夹中,然后使用“导入”导入该文件夹的根级别。
import QtQuick
import QtQuick.Controls
import "Foo"
Page {
Bar {
}
}
// Foo/Bar.qml
import QtQuick
import QtQuick.Controls
Rectangle {
implicitWidth: 20
implicitHeight: 20
color: "red"
}
您可以在线尝试!
其次解读。既然您提到了“静态”,我想您可能正在寻找有关 QML 单例的更多信息。
为了构建单例,通常,我会创建普通组件,比如
FooBarPrivate
,在那里我可以正确配置我的组件,然后,最后,我将它变成单例,比如说,FooBar
。
pragma Singleton
顶部使用
FooBar.qml
FooBar.qml
定义为 singleton
中的
qmldir
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
Page {
title: "Singleton Test"
ColumnLayout {
anchors.centerIn: parent
Button {
text: "Click Me"
onClicked: text = tst.superMethod() // component test
}
Button {
text: "Click Me"
onClicked: text = FooBar.superMethod() // singleton test
}
}
FooBarPrivate {
id: tst
}
}
// FooBarPrivate.qml
import QtQuick
import QtQuick.Controls
Item {
function superMethod() {
return Math.random();
}
}
// qmldir
singleton FooBar 1.0 FooBar.qml
// FooBar.qml
pragma Singleton
FooBarPrivate {
}
您可以在线尝试!