找不到Qt Creator导入文件

时间:2016-04-20 20:21:51

标签: javascript qt

我正在尝试用Qt Creator学习Qt QML。我想将我的javascript函数放入一个单独的文件中并导入'它进入了qml世界。有下面的代码来测试它是如何工作的。

麻烦是我在Creator中运行项目时出现以下错误...

> Starting
> /home/dev/docs/projects/Qt/build-XmlModelView-Desktop-Debug/XmlModelView...
> QML debugging is enabled. Only use this in a safe environment.
> QQmlApplicationEngine failed to load component qrc:/main.qml:5 Script
> qrc:/MyFuncs.js unavailable qrc:/MyFuncs.js:-1 File not found

我观看了视频并关注了Qt在线文档,并查看了其他代码,但我看不出有什么问题。

我只能猜测某种路径设置不正确,但在文档中它说默认路径包含QML文件所在的目录。我的.js和.qml文件位于同一目录中。我也尝试编辑资源文件,但是完全崩溃了。

我尝试将.js文件移动到import语句中的不同位置,绝对路径。我的眼球现在开始消失了。

奇怪 IT工作如果我使用qmlscene运行main.qml

有人可以帮忙吗?这是我的代码......

main.qml文件:

import QtQuick 2.3
import QtQuick.Window 2.2
import "MyFuncs.js" as MyFuncs
Window {
    id: window1
    visible: true
    Rectangle {
        id: contentArea
        MouseArea {
            id: mouseArea1
            anchors.fill: parent
            onClicked: {
                MyFuncs.myfunc();
            }
        }
}

main.cpp文件:

#include <QGuiApplication>
#include <QQmlApplicationEngine>

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

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    return app.exec();
}

MyFuncs.js文件:

function myfunc() {
    console.log("function was called")
}

感谢您的帮助。失去了一整天,只是不知道该去哪里。

2 个答案:

答案 0 :(得分:1)

注: 您可以将JavaScript文件添加到资源中 - 然后当您的项目达到复杂性时,您不希望为每个小改动重新编译,您可以执行我在下面所做的操作:

您正在通过qrc:/MyFuncs.js加载文件,CONFIG += c++11 # Add more folders to ship with the application, here folder_qml.source = qml folder_qml.target = / folder_js.source = js folder_js.target = / folder_img.source = img folder_img.target = / folder_icon.source = icon folder_icon.target = / DEPLOYMENTFOLDERS += folder_qml folder_js folder_img folder_icon 是资源的文件路径。问题是JavaScript文件(可能)未被复制或不在您的路径上。 (这意味着你需要捆绑它),具体取决于你可能出现的场景路径。作为一个例子,我需要将我的JavaScript和QML复制到构建目录,这很烦人:

以下是适用于中等规模项目的配置文件示例:

js

请注意这里真正奇怪的语法:这会将qmliconimg/文件夹复制到您构建的 + debug + icon //I added this explicitly + img //I added this explicitly + js //I added this explicitly + qml //I added this explicitly + release Makefile Makefile.Debug Makefile.Release 中会认为在根上转储这些文件。再想想!构建目录如下所示:

main.qml

现在我的应用程序可以正确引用路径中存在的文件。在IDE内部运行时(取决于设置),您可能有可用的文件,您可能没有。

这是来自import QtQuick 2.2 import QtQuick.LocalStorage 2.0 import QtQuick.Controls 1.0 import QtQuick.Layouts 1.1 import com.lightassistant 1.0 import "qrc:/js/lightassistant.js" as LA; import "qrc:/js/statics.js" as Statics

的snippit
qrc:/js/statics.js

在此证明一点: 如果我将qrc:/nope/js/statics.js更改为` qrc:/nope/js/statics.js: File not found` or ` qrc:/statics.js: File not found` ,则会出现以下错误:

[OS]qtdeploy

现在,从IDE内部运行源代码中的可执行文件,应该没问题。上面列出的问题与部署有关,有很多方法可以解决。我更喜欢这个,所以我可以运行批处理命令,你也可以使用def python_method(ds, **kwargs): Variable.set('execution_date', kwargs['execution_date']) return doit = PythonOperator( task_id='doit', provide_context=True, python_callable=python_method, dag=dag) 工具并指定一些路径来绕过它。

如果您正在测试QML,这种技术可以防止每次有机会重新编译资源文件,从而可以将HOURS添加到工作日。复制文件很快,不需要捆绑资源文件。

我希望这也有所帮助,我也失去了几天时间来解决这个问题。

答案 1 :(得分:0)

我仍然不确定为什么我的导入需要文件进入&#39; Resouces&#39;我在youtube上看到的其他人似乎没有这个。但是,代码现在可以通过右键单击而不是资源而是在资源中的/文件夹上将.js文件添加到资源。为什么我之前没试过。 感谢您的帮助。