QQml应用程序引擎无法加载组件:"Type"不是类型



我在通过另一个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"));

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

您应该将"TabView.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解决方案对我有用。

  1. 将可执行文件添加到 CMakeLists.txt

     set(CMAKE_AUTORCC ON)
     qt_add_executable(app015_custom_elements
         main.cpp
         resources.qrc
         MyButton.qml
     )
    
  2. 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

相关内容

  • 没有找到相关文章

最新更新