kassane / qml_zig Goto Github PK
View Code? Open in Web Editor NEWQML bindings for the Zig programming language
License: Apache License 2.0
QML bindings for the Zig programming language
License: Apache License 2.0
Almost all code in the src
directory originates from https://github.com/vesim987/zqml, but the original author of this code wasn't mentioned anywhere. Please add proper mentions of the original author and adjust the license and the copyright marks in agreement with the original author.
Opened this issue up for discussion on the topic of completing :
I have made a little bit of progress .. have managed to hack together some code that correctly sets up a zig struct as a QObject, passes the object to QML, and within the QML it can make method calls on the object.
So the basic wiring works - just needs a lot of work to make it work for the general case. Getting there.
Whilst QML can call Zig functions / object methods directly - I dont have actual Signal / Slot wiring working yet, or automatic Props. ie - when the Zig data changes, its not yet emitting signals that the QML should be picking up and updating the screen.
Difficulty is that on the zig side, we are literally "staring into the void" with the data, as everything is a C void*. I need to spend some time to understand the internals of all the Q classes :)
Whats there in DOtherrSide is great, but there are pretty large gaps compared to the full QML API.
I have forked DOtherSide for now, and will attempt to fill in some gaps as I go, to add full support in Zig .. but its going to be a long process.
Basically, anything that isnt currently supported in DOtherSide, will put off trying to fix until we get 99% of the existing parts ported.
In terms of wrapping DOtherSide with a Zig API - its an interesting problem.
I really like the final API with the go-qml port, as you simply add Go objects to the QML and it just works. The implementation code is just horrible though, and not easy to port to Zig. Its mostly work to get around the fact that Go is not ABI compatible with C code.
The Rust binding is good to follow to get hints on what to do. However the user API that you end up with seems a bit convoluted.
Surprisingly, the D API looks great, and the implementation of DOtherSide is really clean and easy to follow. Wasnt expecting that !
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.