Trying to install QML.jl without success

Hello all!

I decided to try what I can do with QML but I got stuck before even getting started i.e. in the installation phase. Here’s what I tried and what happened:

Environment:

PC: Razer Blade 15
OS: Win 10 (with all updates)
Julia 1.6.1

What I’ve done:
  1. Removing Julia and .julia directory (and the line in PATH env.var.) to get a clean slate

  2. Installing Julia 1.6.1 with the PATH updates

  3. Starting Julia command line and going to pkg> and giving st
    ==>
    Status C:\Users\IsoPomo\.julia\environments\v1.6\Project.toml (empty project)

  4. Giving:
    add QML

Huge output ends like this:
Precompiling project…
✗ QML
52 dependencies successfully precompiled in 15 seconds
1 dependency errored. To see a full report either run import Pkg; Pkg.precompile() or load the package

  1. Backspacing to Julia REPL and giving:
    import Pkg; Pkg.precompile()

The output is:
Precompiling project…
✗ QML
0 dependencies successfully precompiled in 2 seconds (52 already precompiled)

ERROR: The following 1 direct dependency failed to precompile:

QML [2db162a6-7e43-52c3-8d84-290c1c42d82a]

ERROR: LoadError: InitError: could not load library “C:\Users\IsoPomo.julia\artifacts\65ee34acf07c8058dc5b67dbfc5f1d04c202d7e2\bin\libjlqml.dll”
The specified procedure could not be found.
Stacktrace:
[1] dlopen(s::String, flags::UInt32; throw_error::Bool)
@ Base.Libc.Libdl .\libdl.jl:114
[2] dlopen(s::String, flags::UInt32)
@ Base.Libc.Libdl .\libdl.jl:114
[3] macro expansion
@ C:\Users\IsoPomo.julia\packages\JLLWrappers\bkwIo\src\products\library_generators.jl:54 [inlined]
[4] init()
@ jlqml_jll C:\Users\IsoPomo.julia\packages\jlqml_jll\7qoIT\src\wrappers\x86_64-w64-mingw32-cxx11.jl:10
[5] _include_from_serialized(path::String, depmods::Vector{Any})
@ Base .\loading.jl:674
[6] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String)
@ Base .\loading.jl:760
[7] _require(pkg::Base.PkgId)
@ Base .\loading.jl:998
[8] require(uuidkey::Base.PkgId)
@ Base .\loading.jl:914
[9] require(into::Module, mod::Symbol)
@ Base .\loading.jl:901
[10] include
@ .\Base.jl:386 [inlined]
[11] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt64}}, source::Nothing)
@ Base .\loading.jl:1213
[12] top-level scope
@ none:1
[13] eval
@ .\boot.jl:360 [inlined]
[14] eval(x::Expr)
@ Base.MainInclude .\client.jl:446
[15] top-level scope
@ none:1
during initialization of module jlqml_jll
in expression starting at C:\Users\IsoPomo.julia\packages\QML\eDhCS\src\QML.jl:1
Stacktrace:
[1] pkgerror(msg::String)
@ Pkg.Types C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\Pkg\src\Types.jl:55
[2] precompile(ctx::Pkg.Types.Context; internal_call::Bool, strict::Bool, kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Pkg.API C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\Pkg\src\API.jl:1244
[3] precompile
@ C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\Pkg\src\API.jl:920 [inlined]
[4] #precompile#196
@ C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\Pkg\src\API.jl:918 [inlined]
[5] precompile()
@ Pkg.API C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\Pkg\src\API.jl:918
[6] top-level scope
@ REPL[3]:1

It seems to be the same situation like the one reported in the last post of the topic
Installing QML.jl

Now I don’t know what to do.

You could create an issue at https://github.com/barche/QML.jl/issues .

Or you could try it with Julia 1.6.0 .

I already did, I just forgot to mention that.

It turns out that the old phrase “Google is your friend” is still valid. I found out the error has been corrected in QML.jl master and that one can get on by using
pkg> add GitHub - barche/QML.jl: Build Qt5 QML interfaces for Julia programs.

When trying the next logical thing i.e. the line to run the QML.jl examples from the QML GitHub page

include(joinpath(dirname(pathof(QML)), “…”, “example”, “runexamples.jl”))

I get the first app to work but a crash already on the second one. Because this seems to be clearly QML.jl related I will do as ufechner7 (thanks for answering!) suggested and create an issue on this crash on GitHub

2 Likes

It may be that the example crashes because not all required packages are installed, I really should think of an elegant way to have the dependencies for the examples installed.

Other than that, if the basics work in the master version then maybe it’s time I did a new release :slight_smile:

1 Like

The first ex. board.jl ran (I think) OK after I did what I was told i.e.:
import Pkg; Pkg.add(“Qt5QuickControls_jll”)

The second one produced this output:
running example canvas.jl…
Qt Warning: QQmlApplicationEngine failed to load component ((null):0, (null))
Qt Warning: file:///C:/Users/IsoPomo/.julia/packages/QML/ZrlNP/example/qml/canvas.qml:3:1: plugin cannot be loaded for module “QtQuick.Controls”: Cannot protect module QtQuick.Controls 2 as it was never registered (file:///C:/Users/IsoPomo/.julia/packages/QML/ZrlNP/example/qml/canvas.qml:3, (null))
ERROR: LoadError: Failed to load QML file C:\Users\IsoPomo.julia\packages\QML\ZrlNP\example\qml\canvas.qml
Stacktrace:
etc…

I copied the directory C:\Users\IsoPomo.julia\packages\QML\ZrlNP
into my own dir. structure to be able to toggle off the read-only atrr.s
of the folders and files to be able to edit the files.

  1. Bypassing canvas.jl to be able to test the others
    After changing
    if fname != myname && endswith(fname, “.jl”) && fname ∉ excluded
    to
    if fname != myname && fname != “canvas.jl” && endswith(fname, “.jl”) && fname ∉ excluded
    most of the ex. files start running OK (I think). Here’s some remarks.

  2. filedialog.jl

Qt Warning: file:///C:/Users/IsoPomo/.julia/artifacts/add1bde5fe01a2ffdb80a0977fc3f6505df530f3/qml/QtQuick/Dialogs/DefaultFileDialog.qml:102:33: QML Settings: Failed to initialize QSettings instance. Status code is: 1 (file:///C:/Users/IsoPomo/.julia/artifacts/add1bde5fe01a2ffdb80a0977fc3f6505df530f3/qml/QtQuick/Dialogs/DefaultFileDialog.qml:102, (null))
Qt Warning: file:///C:/Users/IsoPomo/.julia/artifacts/add1bde5fe01a2ffdb80a0977fc3f6505df530f3/qml/QtQuick/Dialogs/DefaultFileDialog.qml:102:33: QML Settings: The following application identifiers have not been set: QVector(“organizationName”, “organizationDomain”) (file:///C:/Users/IsoPomo/.julia/artifacts/add1bde5fe01a2ffdb80a0977fc3f6505df530f3/qml/QtQuick/Dialogs/DefaultFileDialog.qml:102, (null))
selected single file file:///C:/Users/IsoPomo/OMAT_VARMUUSKOPIOITAVAT/Julia/QML/error.txt
selected paths:
/C:/Users/IsoPomo/OMAT_VARMUUSKOPIOITAVAT/Julia/QML/error.txt

  1. grid.jl
    After clicking one of the emojis all emojis disappear. Minimizing/maximizing the window: no change. Refresh needed or what?

  2. gui.jl
    The counter value used in the concatenation is one smaller than I supposed it to be

  3. makie.jl
    This doesn’t work:
    running example makie.jl…
    ERROR: LoadError: MethodError: no method matching rotate_cam!(::AbstractPlotting.FigureAxisPlot, ::Float64, ::Float64, ::Float64)
    Closest candidates are:
    rotate_cam!(::Scene, ::Number…) at C:\Users\IsoPomo.julia\packages\AbstractPlotting\gE7AT\src\camera\camera3d.jl:259
    Stacktrace:
    [1] render_function(screen::QML.MakieSupport.QMLScreen)
    @ Main C:\Users\IsoPomo\OMAT_VARMUUSKOPIOITAVAT\Julia\QML\ZrlNP\example\makie.jl:16
    [2] exec()
    @ QML C:\Users\IsoPomo.julia\packages\CxxWrap\OcN1Z\src\CxxWrap.jl:618
    [3] top-level scope
    @ C:\Users\IsoPomo\OMAT_VARMUUSKOPIOITAVAT\Julia\QML\ZrlNP\example\makie.jl:25
    in expression starting at C:\Users\IsoPomo\OMAT_VARMUUSKOPIOITAVAT\Julia\QML\ZrlNP\example\makie.jl:25
    ERROR: LoadError: failed process: Process('C:\Users\IsoPomo\AppData\Local\Programs\Julia-1.6.1\bin\julia.exe' -Cnative '-JC:\Users\IsoPomo\AppData\Local\Programs\Julia-1.6.1\lib\julia\sys.dll' -g1 --project makie.jl, ProcessExited(1)) [1]

Stacktrace:
[1] pipeline_error
@ .\process.jl:525 [inlined]
[2] run(::Cmd; wait::Bool)
@ Base .\process.jl:440
[3] run
@ .\process.jl:438 [inlined]
[4] (::var"#1#2")()
@ Main C:\Users\IsoPomo\OMAT_VARMUUSKOPIOITAVAT\Julia\QML\ZrlNP\example\runexamples.jl:9
[5] cd(f::var"#1#2", dir::String)
@ Base.Filesystem .\file.jl:95
[6] top-level scope
@ C:\Users\IsoPomo\OMAT_VARMUUSKOPIOITAVAT\Julia\QML\ZrlNP\example\runexamples.jl:5
[7] include(fname::String)
@ Base.MainInclude .\client.jl:444
[8] top-level scope
@ REPL[1]:1
in expression starting at C:\Users\IsoPomo\OMAT_VARMUUSKOPIOITAVAT\Julia\QML\ZrlNP\example\runexamples.jl:5

Thanks for the detailed feedback. Some comments:

  • grid.jl: can’t reproduce, maybe running only the grid example in a fresh julia session could help
  • gui.jl: the lower count is intentional :slight_smile:
  • Makie is broken, there is a PR to fix it that I still need to merge
  • Can’t get canvas to run either, I need to investigate this. Edit: this example is missing a using Qt5QuickControls2_jll