Javascript 找不到Qt Creator导入文件
我正在尝试使用Qt-Creator学习Qt-QML。我想将我的javascript函数放入一个单独的文件中,并将其“导入”到qml世界中。我们已经得到了下面的代码来测试它是如何工作的 问题是我在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
> 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`