QML对象类型不是QTCreator中的类型错误

bou*_*rne 8 qt qml qqmlcomponent

大家好我是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"}
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图通过另一个qml(main.qml)显示它在同一目录中

import QtQuick 2.3
import QtQuick.Controls 1.2
import "."

ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Main")

MyTabView {}

}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行我的项目时,我得到了这个错误

QQmlApplicationEngine无法加载组件qrc:/qml/main.qml:11 TabView不是一个类型

请注意我在MyTabView.qml中有M Caps,MyTabView.qml和main.qml在同一目录中.

有人能指出我在做什么错吗?我想指出的一件事是,当我替换MyTabView.qml的所有代码而不是MyTabView {}内部时main.qml,程序不会给出任何错误并正确运行.提前致谢

SR_*_*SR_ 16

您是否已将文件添加到资源中?
将您MyTabView.qml的项目添加到同一目录中main.qml是不够的.
您必须将您的QML文件放在参考资源(可能main.qrc/qml/)中才能部署它.
Qt Creator的编辑器不需要这种包含以便找到您的类型,因此它不会显示任何错误.

  • @ A.Ocannaille你应该考虑接受这个答案,如果它解决了你的问题. (2认同)

小智 5

我有一个类似的问题。

qrc:AGview.qml:8:15:AGraph不是类型

我解决了它:我的原始代码(在我的main.cpp中):

view.setSource(QUrl("qrc:AGview.qml"));
Run Code Online (Sandbox Code Playgroud)

工作中的一个:

view.setSource(QUrl("qrc:/AGview.qml"));
Run Code Online (Sandbox Code Playgroud)

我认为没有斜杠就不会在实际文件夹中搜索。


QtR*_*RoS 1

您应该将“TabView.qml”重命名为“MyTabView.qml”之类的名称。

因为那个进口

import "."
Run Code Online (Sandbox Code Playgroud)

您的“QtQuick.Controls 1.2”和本地文件夹“”中的 TabView 存在冲突。