我在通过另一个qml加载一个qml时遇到问题。
基本上,我在MyTabView.qml
中创建了一个 qml 类型MyTabView
:
import QtQuick 2.3
import QtQuick.Controls 1.2
TabView {
width: 360
height: 360
Component.onCompleted: {
addTab("Tab 1", tab1)
addTab("Tab 2", tab2)
}
Component {
id: tab1
Rectangle {color: "red"}
}
Component {
id: tab2
Rectangle {color: "blue"}
}
}
我正在尝试在另一个 qml 文件 ( main.qml
) 中使用它,该文件位于同一目录中:
import QtQuick 2.3
import QtQuick.Controls 1.2
import "."
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Main")
MyTabView {}
}
但是当我尝试运行我的项目时,出现此错误:
QQml应用程序引擎加载组件失败qrc:/qml/main.qml:11 TabView 不是一种类型
笔记:
我在
MyTabView.qml
中有 M Caps,它与main.qml
位于同一目录中。当我替换
MyTabView.qml
的所有代码而不是MyTabView {}
main.qml
时,程序不会给出任何错误并且运行正常。
我做错了什么以及如何解决它?
您是否已将文件添加到您的资源中?
将MyTabView.qml
添加到同一目录中的项目中是不够的main.qml
。
您必须将QML文件放在资源(可能main.qrc/qml/
)中才能部署它。
Qt Creator的编辑器不需要此包含来查找您的类型,因此它不会显示任何错误。
我也有类似的问题。
qrc:AGview.qml:8:15: AGraph 不是一种类型
我解决了:我的原始代码(在我的主.cpp):
view.setSource(QUrl("qrc:AGview.qml"));
工作的一个:
view.setSource(QUrl("qrc:/AGview.qml"));
我认为如果没有斜杠,它就不会在实际文件夹中搜索。
"重命名为"MyTabView.qml"。
因为那个进口
import "."
您有来自"QtQuick.Controls 1.2"和本地文件夹"的选项卡视图冲突。
此错误也可能是由组件出现错误引起的。例如,我有这样一系列错误:
QQmlApplicationEngine failed to load component
qrc:/main.qml:6 Type MainView unavailable
qrc:/MainView.qml:27 Type ApplicationLocked unavailable
qrc:/ApplicationLocked.qml:4 MetaStateChart is not a type
不是很清楚,MainView
中的错误是由ApplicationLocked
中的问题引起的。当我修复该错误时,其他一切都有效。
因此,与从第一个编译器错误开始的传统智慧相反,可能有必要从最后一个开始!
我最近在QT 6.2和QML上遇到了这个问题。同时使用 CMake 和 QMake 作为构建系统。
解决方案是添加 QML 文件,例如 MyTabView.qml
到资源文件,并确保将其添加到 CMakeList 或项目文件.txt应自动完成)。
然后在main.qml
顶部或使用此自定义组件的任何地方import qrc:/
.假设自定义 qml 文件是在前缀 /
下添加的,因此其资源路径将qrc:/MyTabView.qml
。
对于Qt 6.4,Rob Sanders解决方案对我有用。
-
将可执行文件添加到 CMakeLists.txt
set(CMAKE_AUTORCC ON) qt_add_executable(app015_custom_elements main.cpp resources.qrc MyButton.qml )
-
像
import "qrc:/qml"
一样导入它(将/qml 更改为 qml 文件所在的位置)
然后你可以使用它。就我而言
MyButton{}
如果您尝试了其他人提到的所有解决方案,但它们不起作用,则可以尝试以下解决方案:
# (in cmakelists)
qt_add_qml_module(appNewapp
URI Newapp
VERSION 1.0
QML_FILES Main.qml
YourQML.qml
)
这适用于Qt6.4