Valery
November 1, 2024, 1:20pm
1
When runing this
using QML
using Observables
slidervalue = Observable(0.0)
loadqml(
joinpath(pwd(),"slider.qml"),
variables = JuliaPropertyMap(
"slidervalue" => slidervalue
)
)
exec()
and the content of “slider.qml” being
import QtQuick 2.6
import QtQuick.Controls 2.3
import org.julialang 1.0
ApplicationWindow {
id: mainWin
title: "My Application"
width: 100
height: 100
visible: true
Rectangle {
anchors.fill: parent
color: "red"
Text {
anchors.centerIn: parent
text: props.hi + Julia.world()
}
}
}
I get the following error
Qt Warning: qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/ApplicationWindow.qml:2134880960: RangeError: Maximum call stack size exceeded. (qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/ApplicationWindow.qml:2134880960, (null))
Qt Warning: path /slider.qml:2134880912: RangeError: Maximum call stack size exceeded. (path /slider.qml:2134880912, (null))
Qt Warning: path /slider.qml:2134880912: RangeError: Maximum call stack size exceeded. (path /slider.qml:2134880912, (null))
Qt Warning: path /slider.qml:2134880912: RangeError: Maximum call stack size exceeded. (path /slider.qml:2134880912, (null))
where I manually replaced the displayed path with path for the purpose of this post.
General informations:
Julia v.1.11.1
Package status:
QML v0.9.1
Observables v0.5.5
OS: Debian GNU/Linux 12 (bookworm)
Processor: Intel Core i7-7500U x4
Graphics NV117/Mesa Intel HD Graphics 620 (KBL GT2)
What is the problem and how to solve it ?
For your information, this code example comes from a talk given by Bart Janssens at the JuliaCon 2020 and correspnods to the first example in this video: https://youtu.be/AddbHe05yRg?si=rMqBECxDDAnKFK4I&t=38
If needed, the corresponding source material can be found here GitHub - barche/juliacon2020-qml: Juliacon 2020 slides for the QML.jl talk
Note that I changed the exec_async() from the example to exec() in order for it to run.
I have the same issue and can reproduce it by two means:
Running the code from inside VSCode.
Wrapping code like OP’s into one function and call it from the REPL in a terminal e.g. by prefixing @async or Threads.@spawn ,
Running it from the REPL without async/threading is fine in my setup.
Julia 1.11.2, QML 0.9.1, CxxWrap 0.16, Observables 0.5.5, Ubuntu 22.04.5 LTS
If you are using Julia 1.11.x, make sure you have in your project file these entries:
CxxWrap = "0.16"
QML = "0.9"
Thanks for the reminder. I double checked and the dependencies are there as indicated by you. Point is, currently I seem not to be able to make QML.jl work from inside VSCode, where with the same code as OP I’m getting the same error messages plus a zombie ApplicationWindow. As I do not know how to properly share my complete VSCode config and project setup, I added another direct method that produces the same error messages without VSCode.
To be more explicit, here are some steps to reproduce:
Clone QmlJuliaExamples
Make a copy of QmlJuliaExamples/basic/drag.jl and name it QmlJuliaExamples/basic/drag2.jl
Modify QmlJuliaExamples/basic/drag2.jl as follows:
using QML
@qmlfunction println
function run()
loadqml(joinpath(dirname(@__FILE__), "qml", "drag.qml"))
exec()
end
In the terminal, cd <wherever you cloned it>/QmlJuliaExamples/basic/ and run the Julia REPL and type:
]
activate .
instantiate
<backspace>
include("drag2.jl")
run()
This will run fine and you can play with the dragging example now. However, the following instead will produce OP’s error messages and a dead window:
To reproduce this in VSCode (I’m using the extension julialang v1.127.2) without explicit Threads.@spawn, do the following steps:
Go to File -> Open Folder... and open <wherever you cloned it>/QmlJuliaExamples/basic/
In the file explorer, double click on drag2.jl.
Click the run button at the upper right of the code window.
The terminal should show with the message run (generic function with 1 method) and the Julia prompt.
Type run()
These steps will also produce a dead window and the following messages (I have anonymized some file paths):
Qt Warning: qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/ApplicationWindow.qml:794814400: RangeError: Maximum call stack size exceeded. (qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/ApplicationWindow.qml:794814400, (null))
Qt Warning: file:///***/QmlJuliaExamples/basic/qml/drag.qml:794814352: RangeError: Maximum call stack size exceeded. (file:///***/QmlJuliaExamples/basic/qml/drag.qml:794814352, (null))
Qt Warning: file:///***/QmlJuliaExamples/basic/qml/drag.qml:794814352: RangeError: Maximum call stack size exceeded. (file:///***/QmlJuliaExamples/basic/qml/drag.qml:794814352, (null))
Qt Warning: file:///***/QmlJuliaExamples/basic/qml/drag.qml:794814352: RangeError: Maximum call stack size exceeded. (file:///***/QmlJuliaExamples/basic/qml/drag.qml:794814352, (null))
Qt Warning: file:///***/QmlJuliaExamples/basic/qml/drag.qml:794814352: RangeError: Maximum call stack size exceeded. (file:///***/QmlJuliaExamples/basic/qml/drag.qml:794814352, (null))
Qt Warning: file:///***/QmlJuliaExamples/basic/qml/drag.qml:794814352: RangeError: Maximum call stack size exceeded. (file:///***/QmlJuliaExamples/basic/qml/drag.qml:794814352, (null))
Qt Warning: file:///***/QmlJuliaExamples/basic/qml/drag.qml:794814352: RangeError: Maximum call stack size exceeded. (file:///***/QmlJuliaExamples/basic/qml/drag.qml:794814352, (null))
Of course, this also happens in VSCode when you try to run the original drag.jl directly.
Well, you could create an issue at GitHub · Where software is built , but the maintainers are overloaded and I would not expect a quick fix.
Myself, I do not use the VSCode Julia terminal. Instead, I launch a normal (Bash) terminal and start julia with the required parameter from there, usually:
julia --project
Then everything should work.
Can you check whether this example works correctly with Julia 1.10?
I currently don’t have a 1.10 installation of Julia, but I tried 1.9 instead.
Same results for drag2.jl in Julia REPL in Ubuntu terminal:
run() works fine.
’ Threads.@spawn run()’ throws errors.
I didn’t check running from VSCode.