需要有关导入 QML 的帮助

Need help on importing QML

我需要一些有关 QML 导入的帮助。我有 2 个项目,名称为 Project1 和 Project2

Project 1
|-QmlFile1.qml
|-qml1.qrc

Project 2
|-QmlFile2.qml
|-qml2.qrc

是否可以将项目 1 的 QmlFile1.qml 导入项目 2 的 QmlFile2.qml?

QT_WS\TestQuick\main.qml

import QtQuick 2.9
import QtQuick.Window 2.2
import "../COMMON"
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    MyButton {
        id: button1
    }
}

QT_WS\COMMON\MyButton.qml

import QtQuick 2.0

Item {
    width: 400
    height: 80
    Rectangle {
        id: button
        anchors.fill: parent
        color: "red"
    }
}

QT_WS\TestQuick\TestQuick.pro

QT += quick
CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp

RESOURCES += qml.qrc \
    sharedresource.qrc

QML_IMPORT_PATH =

QML_DESIGNER_IMPORT_PATH =

qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

main.qrc

<RCC>
    <qresource prefix="/">
        <file>main.qml</file>
    </qresource>
</RCC>

sharedresource.qrc

<RCC>
    <qresource prefix="/">
        <file>../COMMON/MyButton.qml</file>
    </qresource>
</RCC>

错误:

Starting C:\Personal\QT_WS\build-TestQuick-Desktop_Qt_5_9_4_MSVC2015_64bit-Debug\debug\TestQuick.exe...
QML debugging is enabled. Only use this in a safe environment.
QQmlApplicationEngine failed to load component
qrc:/main.qml:3 "../COMMON": no such directory

C:/Personal/QT_WS/build-TestQuick-Desktop_Qt_5_9_4_MSVC2015_64bit-Debug/debug/TestQuick.exe exited with code -1

Folder structure screenshot

我认为您可能缺少的是 qml 文件不在您的 .qrc 文件中,因此它不知道在哪里可以找到它。如果您要在项目之间共享代码,为将包含在两个项目中的公共文件创建一个单独的 .qrc 文件是有意义的。所以您的项目结构可能如下所示:

Project 1
  |---qml1.qrc        // Files for Project1
      |---someFile1.qml
  |---shared_qml.qrc  // Shared files
      |---sharedFile1.qml
      |---sharedFile2.qml

Project 2
  |---qml2.qrc        // Files for Project2
      |---someFile2.qml
  |---shared_qml.qrc  // Shared files
      |---sharedFile1.qml
      |---sharedFile2.qml

编辑:

我尝试构建一个与您使用的结构相同的项目。当我像这样导入文件时它起作用了:

import "qrc:/../COMMON"

以您现在尝试的方式共享代码很棘手,因为 qrc 系统不支持指向项目树之外的路径。

相反,我建议您将共享代码提取到一个库中,然后您可以从两个项目中使用该库。无论如何,在长期 运行 中维护起来可能会更容易。