是否可以创建 QML 组件库,其中所有 QML 文件都在二进制文件中,并且引擎仍然像 QtQuick 一样识别它?

问题描述 投票:0回答:1

是否可以创建 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:这是经过编辑的,有些人对我的问题有两种解释,它们都是错误的,这不是他的错,不清楚,所以我改变了措辞。

c++ qt user-interface qml static-libraries
1个回答
0
投票

[编辑] 我对你的问题有两种解释。

第一个解释。您可以将组件分组到一个文件夹中,然后使用“导入”导入该文件夹的根级别。

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

  1. pragma Singleton
     顶部使用 
    FooBar.qml
  2. 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 {
}

您可以在线尝试!

© www.soinside.com 2019 - 2024. All rights reserved.