首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QML文件中导入QML组件资源

如何在QML文件中导入QML组件资源
EN

Stack Overflow用户
提问于 2018-07-20 13:19:24
回答 1查看 2K关注 0票数 1

我有以下目录结构:

代码语言:javascript
复制
ui/
  |- resources.qrc
  |- qml/
    |- main_window_presenter.qml
    |- MyPresenter.qml

resources.qrc内容:

代码语言:javascript
复制
<RCC>
    <qresource prefix="/">
        <file>qml/MyPresenter.qml</file>
        <file>qml/main_window_presenter.qml</file>
    </qresource>
</RCC>

MyPresenter.qml内容:

代码语言:javascript
复制
import QtQuick 2.11

FocusScope {
  id: root

  property Item view
  property QtObject model

  Component.onCompleted: {
    root.view.anchors.fill = root
    root.view.focus = true
  }
}

main_window_presenter.qml内容:

代码语言:javascript
复制
import "."

MyPresenter {
  id: root
}

main.cpp内容:

代码语言:javascript
复制
#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char **argv)
{
  QGuiApplication app(argc, argv);

  QQmlApplicationEngine engine;
  engine.load(":/qml/main_window_presenter.qml");

  return app.exec();
}

当我运行应用程序时,我得到

代码语言:javascript
复制
QQmlApplicationEngine failed to load component
file::/qml/main_window_presenter.qml:1 import "." has no qmldir and no namespace

如果我删除import "." at main_window_presenter.qml,我会得到

代码语言:javascript
复制
QQmlApplicationEngine failed to load component                                                                                                                             
file::/qml/main_window_presenter.qml:3 MyPresenter is not a type

我想我不应该需要一个import语句,因为它们位于同一个目录中。我正在使用介子构建系统,在meson.build中使用这个相关部分(exe_moc_headers在前面定义):

代码语言:javascript
复制
qt5_module = import('qt5')
exe_processed = qt5_module.preprocess(moc_headers : exe_moc_headers, qresources : 'ui/resources.qrc')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-20 15:05:53

正如@eyllanesc建议的那样,QQuickView可以代替QQmlApplicationEngine:

代码语言:javascript
复制
#include <QGuiApplication>
#include <QQuickView>

int main(int argc, char **argv)
{
  QGuiApplication app(argc, argv);

  QQuickView* view{new QQuickView};
  view->setSource(QUrl("qrc:///qml/main_window_presenter.qml"));
  view->show();

  return app.exec();
}

如果错误消息没有通过说"MyPresenter不是类型“而找不到该类型,我可能自己就知道了。这使我相信,这是一个参考问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51443466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档