我正在尝试用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")
}
感谢您的帮助。失去了一整天,只是不知道该去哪里。
答案 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
请注意这里真正奇怪的语法:这会将qml
,icon
,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
中会认为在根上转储这些文件。再想想!构建目录如下所示:
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
:
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文件添加到资源。为什么我之前没试过。 感谢您的帮助。