大家好我是QT的新手,我在通过另一个qml加载一个qml时遇到问题 基本上我已经创建了一个qml MyTabView(MyTabView.qml)
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 {}
}
但是当我尝试运行我的项目时,我收到此错误
QQmlApplicationEngine无法加载组件 qrc:/qml/main.qml:11 TabView不是类型
请注意我在MyTabView.qml中有M Caps,而MyTabView.qml和main.qml在同一目录中。
有人能指出我在做什么错吗?
我想指出的一点是,当我在MyTabView {}
内替换MyTabView.qml的所有代码而不是main.qml
时,程序不会给出任何错误并正确运行。
提前致谢
答案 0 :(得分:14)
您是否已将文件添加到资源中?
在MyTabView.qml
的同一目录中将main.qml
添加到项目中是不够的
您必须将QML文件放在参考资料中(可能是main.qrc/qml/
)才能部署它
Qt Creator的编辑器不需要这个包含来找到你的类型,因此它没有显示错误。
答案 1 :(得分:2)
我遇到了类似的问题。
qrc:AGview.qml:8:15:AGraph不是类型
我解决了它: 我的原始代码(在我的main.cpp中):
view.setSource(QUrl("qrc:AGview.qml"));
工作人员:
view.setSource(QUrl("qrc:/AGview.qml"));
我认为没有斜线就不会在实际文件夹中搜索。
答案 2 :(得分:0)
您应该将“TabView.qml”重命名为“MyTabView.qml”。
因为导入
import "."
你有来自“QtQuick.Controls 1.2”和本地文件夹“。”的TabView冲突。
答案 3 :(得分:0)
此错误也可能是由组件出现错误引起的。例如,我有以下错误序列:
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
中的问题引起的。当我修复该错误后,其他所有功能均正常工作。
因此,与从第一个编译器错误开始的传统观点相反,可能有必要从最后一个编译器错误开始!