Javascript 找不到Qt Creator导入文件

Javascript 找不到Qt Creator导入文件,javascript,qt,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 us

我正在尝试使用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文件所在的目录。My.js和.qml文件位于同一目录中。我还试着编辑资源文件,但完全崩溃了

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

奇怪的是,如果我使用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();
}
谢谢你的帮助。失去了整整一天,只是不知道该往哪里走。

注意: 您可能只需将JavaScript文件添加到参考资料中,然后当您的项目遇到复杂性时,您不想为每个小更改重新编译,您可以执行我在下面所做的操作:

您正在通过
qrc:/MyFuncs.js
加载文件,该文件是指向资源的文件路径。问题是JavaScript文件(可能)未被复制或不在您的路径上。(这意味着您需要捆绑它)根据场景的路径,您可能会让它显示出来。例如,我需要将我的JavaScript和QML复制到构建目录,这很烦人:

以下是一个中等规模项目的配置文件示例:

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
注意这里非常奇怪的语法:它将
js
qml
图标
、和
img
文件夹复制到构建中的
/
,您认为这些文件会转储到根目录中。再想一想!生成目录如下所示:

 + 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
现在,我的应用程序可以正确引用路径上存在的文件。在IDE内部运行时(取决于设置),您可能有可用的文件,但可能没有

这是我的
main.qml
中的一个片段:

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
为了证明这一点: 如果我将
qrc:/js/statics.js
更改为
qrc:/nope/js/statics.js
,错误如下:

`    qrc:/nope/js/statics.js: File not found`
or
`    qrc:/statics.js: File not found`
现在从IDE内部来看,一切都应该很好,因为它在源代码内部运行可执行文件。上面列出的问题与部署有关,有很多方法可以解决。我更喜欢这样,这样我可以运行批处理命令,您也可以使用
[OS]qtdeploy
工具并指定一些路径来绕过它

这种技术可以防止每次您有机会重新编译资源文件,如果您正在测试QML,这会增加您的工作时间。复制文件速度快,不需要绑定资源文件


我希望这能有所帮助,我也在一年半前花了几天时间才弄明白这一点。

我仍然不知道为什么我的导入需要文件出现在“资源”中,我在youtube上看到的其他文件似乎没有这个功能。但是,代码现在可以工作了,因为我已经通过右键单击将.js文件添加到资源中,而不是在资源上,而是在资源中的/文件夹上。为什么我以前没试过呢。
感谢这两方面的帮助。

只要将js文件添加到参考资料中,它就会工作。不要手动编辑,右键单击项目浏览器中的资源文件,然后选择“添加现有文件”@ddriver谢谢您的帮助。我试过了。我尝试了很多次,但实际上并没有移动文件。但是,我只是再次点击了“/”而不是“资源”。这次它添加了文件!!!这很有效。谢谢你的帮助。你的回答有点让我不知所措,但它给了我一个起点。那么,你是说解决这个问题的最佳方法是一种有助于解决未来复杂性/编译问题的方法。这样就可以通过在配置文件中显式命名来“捆绑”我的.js文件。谢谢我必须仔细阅读配置文件的内容。非常感谢您的快速回答(没有双关语)。是的,我是说,接下来要显式地复制javascript/images/等等。。。这会加速事情的发展。资源文件最终将需要大量时间来编译(我有一个3-5分钟的构建,这就是为什么我采用这种方法)。听起来好像你已经让它工作了。你的文件现在正在工作,因为资源现在可以通过
Resources
文件在路径上使用。请注意,处理资源文件需要时间,如果它成为一种负担,您可能想回顾一下我的答案,对于一个小项目来说,编译时间可以忽略不计。
`    qrc:/nope/js/statics.js: File not found`
or
`    qrc:/statics.js: File not found`