gpt4 book ai didi

qt - 如何将 QML 文件组织到嵌套文件夹中?

转载 作者:行者123 更新时间:2023-12-05 09:34:02 26 4
gpt4 key购买 nike

我在 https://github.com/jh3010-qt-questions/qml_location 有一个示例项目

如果我的层次结构是这样的:

$ tree qml_location/
qml_location/
├── MyDeepComponent.qml
├── MyDeepComponentForm.ui.qml
├── main.cpp
├── main.qml
├── qml.qrc
└── qml_location.pro

然后我可以这样写main.qml:

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
MyDeepComponent {}
}

它会起作用。

但是,我想将一些 QML 文件组织到一个文件夹层次结构中,而不是让它们都在同一级别。

例如,如果我搬到:

$ tree qml_location/
qml_location/
├── main.cpp
├── main.qml
├── qml
│   ├── MyDeepComponent.qml
│   ├── MyDeepComponentForm.ui.qml
│   └── more
│   ├── MyDeeperComponent.qml
│   └── MyDeeperComponentForm.ui.qml
├── qml.qrc
└── qml_location.pro

并且有一个看起来像这样的 main.qml:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12

Window
{
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Column
{
MyDeepComponent {}
MyDeeperComponent {}
}
}

Qt Creator 告诉我 MyDeepComponent 和 MyDeeperComponent 是未知的。

当我尝试运行时,出现错误:MyDeepComponent is not a type

我该怎么做才能让它起作用?

一个警告,我不想在 main.qml 的顶部放置一个特殊的或额外的导入。这还有可能吗?

qml.qrc

<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>qml/MyDeepComponent.qml</file>
<file>qml/MyDeepComponentForm.ui.qml</file>
<file>qml/more/MyDeeperComponent.qml</file>
<file>qml/more/MyDeeperComponentForm.ui.qml</file>
</qresource>
</RCC>

qml_location.pro

QT += quick

CONFIG += c++11

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
main.cpp

RESOURCES += qml.qrc

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =

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

最佳答案

这个答案不符合不导入的要求,但无论如何值得一提的是,它可以通过在 main.qml 顶部导入几个来解决。

https://github.com/jh3010-qt-questions/qml_location/tree/import_solution

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12

import "qml"
import "qml/more"

Window
{
width: 640
height: 480
visible: true

title: qsTr("Hello World")

Column
{
MyDeepComponent
{
}

MyDeeperComponent
{
}
}
}

关于qt - 如何将 QML 文件组织到嵌套文件夹中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66822773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com