Language Bindings: Difference between revisions
(Add CXX-Qt) |
WindJunkie (talk | contribs) (correcting a weird link) |
||
(7 intermediate revisions by 5 users not shown) | |||
Line 3: | Line 3: | ||
==Programming Language Support & Language Bindings== | ==Programming Language Support & Language Bindings== | ||
The Qt API is implemented in C++, and provides additional features for easier cross-platform development. QML – introduced with Qt Quick | The Qt API is implemented in C++, and provides additional features for easier cross-platform development. QML – introduced with Qt Quick and JavaScript-like declarative, language designed to describe the user interface of a program: both what it looks like, and how it behaves. | ||
As an alternative to using C++, | As an alternative to using C++, Qt offers other languages, including Python . | ||
Officially, | Officially, Python bindings are being maintained by the project, under the name of [https://pyside.org Qt for Python]. | ||
==C++ Development with Qt== | ==C++ Development with Qt== | ||
Line 33: | Line 33: | ||
==Qt for Python== | ==Qt for Python== | ||
The ''Qt for Python'' project provides the ''' | The ''Qt for Python'' project provides the '''PySide6''' (and PySide2) module allowing users to develop Qt and QML application easily from Python. | ||
*You can find more information for the project, which is currently available as a Technical Preview, in the [https:// | *You can find more information for the project, which is currently available as a Technical Preview, in the [https://pyside.org wiki page]. | ||
*Compatible with Qt 5.11, and Python | *Compatible with Qt 5.11+. Currently in Qt6, Qt for Python is released on a similar cycle as the Qt framework, and supports Python 3.8+ (in Qt 6.6.0) | ||
Qt for Python ( | Qt for Python (PySide6) is the official set of Python wheels that The Qt Company provides. | ||
[https://www.qt.io/qt-for-python Find out more about Qt for Python] | [https://www.qt.io/qt-for-python Find out more about Qt for Python] | ||
Line 44: | Line 44: | ||
==These are third party language bindings for Qt== | ==These are third party language bindings for Qt== | ||
===[http://www.riverbankcomputing.com/ | ===[http://www.riverbankcomputing.com/ PyQt]=== | ||
(PyQt is developed by [ | (PyQt is developed by [https://www.riverbankcomputing.com/ Riverbank Computing], not to be confused with [https://pyside.org Qt for Python (PySide)] from [https://qt.io The Qt Company]) | ||
*[https://wiki.python.org/moin/PyQt/Tutorials Tutorials] | *[https://wiki.python.org/moin/PyQt/Tutorials Tutorials] | ||
Line 60: | Line 60: | ||
Ring uses Qt as its toolkit to provide cross-platform abilities. | Ring uses Qt as its toolkit to provide cross-platform abilities. | ||
===[https://qtjambi.io/ Qt for Java] (QtJambi)=== | ===[https://qtjambi.io/ Qt for Java and Kotlin] (QtJambi)=== | ||
QtJambi is Qt bindings for the Java programming language originally developed by Trolltech, the predecessor of The Qt Company. | QtJambi is Qt bindings for the Java programming language originally developed by Trolltech, the predecessor of The Qt Company. | ||
The successive open source project provides bindings of Qt5 and Qt6 releases for latest Java JDK versions. | The successive open source project provides bindings of Qt5 and Qt6 releases for latest Java JDK versions, GraalVM and Kotlin. | ||
*[https://qtjambi.io/ Project on Github] | *[https://qtjambi.io/ Project on Github] | ||
Line 69: | Line 69: | ||
*[https://doc.qtjambi.io/5.15 QtJambi for Qt5 API Documentation] | *[https://doc.qtjambi.io/5.15 QtJambi for Qt5 API Documentation] | ||
*[https://doc.qtjambi.io/latest QtJambi for Qt6 API Documentation] | *[https://doc.qtjambi.io/latest QtJambi for Qt6 API Documentation] | ||
===[https://github.com/KDAB/cxx-qt/ Qt for Rust] (CXX-Qt)=== | |||
Safe interop between Rust and Qt using [https://cxx.rs/ CXX] | |||
CXX-Qt is a set of Rust crates for creating bidirectional Rust ⇄ C++ bindings with Qt. It can be used to integrate Rust into C++ applications using CMake or used to build Rust applications with Cargo. CXX-Qt provides tools for implementing QObject subclasses in Rust which can be used from C++, QML, and JavaScript. | |||
*[https://github.com/KDAB/cxx-qt/ Project on Github] | |||
*[https://kdab.github.io/cxx-qt/book/ Rust Book with Getting Started guide] | |||
===[https://github.com/rust-qt Qt for Rust] (Rust-Qt)=== | ===[https://github.com/rust-qt Qt for Rust] (Rust-Qt)=== | ||
Line 76: | Line 84: | ||
*[https://github.com/rust-qt Project on Github] | *[https://github.com/rust-qt Project on Github] | ||
===[https://github.com/woboq/qmetaobject-rs | ===[https://github.com/woboq/qmetaobject-rs Qt Quick for Rust] (qmetaobject-rs)=== | ||
QML bindings for the Rust language | QML bindings for the Rust language | ||
Line 82: | Line 90: | ||
*[https://github.com/woboq/qmetaobject-rs Project on Github] | *[https://github.com/woboq/qmetaobject-rs Project on Github] | ||
*[https://www.youtube.com/watch?v=6pcOhCWLd_U Presentation on Qt YouTube channel] | *[https://www.youtube.com/watch?v=6pcOhCWLd_U Presentation on Qt YouTube channel] | ||
===[https://github.com/White-Oak/qml-rust Qt Quick for Rust] (qml-rust)=== | ===[https://github.com/White-Oak/qml-rust Qt Quick for Rust] (qml-rust)=== | ||
Line 113: | Line 113: | ||
===[https://github.com/Papierkorb/qt5.cr Qt for Crystal] (qt5.cr)=== | ===[https://github.com/Papierkorb/qt5.cr Qt for Crystal] (qt5.cr)=== | ||
* | *Qt bindings for the Crystal language | ||
===[https://github.com/jerous86/nimqt Qt for Nim] (nimqt)=== | |||
*Qt bindings for Nim | |||
===[https://github.com/filcuc/nimqml Qt Quick for Nim] (nimqml)=== | |||
*QML bindings for Nim | |||
===[https://github.com/therecipe/qt Qt for Go] (qt)=== | ===[https://github.com/therecipe/qt Qt for Go] (qt)=== | ||
Line 128: | Line 136: | ||
===[https://gitlab.com/ddobrev/QtSharp Qt for C#/Mono/.Net] (QtSharp)=== | ===[https://gitlab.com/ddobrev/QtSharp Qt for C#/Mono/.Net] (QtSharp)=== | ||
This project aims to create Mono/.NET libraries that wrap Qt thus enabling its usage through C#. It relies on the excellent CppSharp. | This project aims to create Mono/.NET libraries that wrap Qt thus enabling its usage through C#. It relies on the excellent CppSharp. | ||
Latest revision as of 16:34, 15 July 2024
En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh
Programming Language Support & Language Bindings
The Qt API is implemented in C++, and provides additional features for easier cross-platform development. QML – introduced with Qt Quick and JavaScript-like declarative, language designed to describe the user interface of a program: both what it looks like, and how it behaves. As an alternative to using C++, Qt offers other languages, including Python . Officially, Python bindings are being maintained by the project, under the name of Qt for Python.
C++ Development with Qt
Qt provides an intuitive C++ class library with a rich set of application build blocks for C++ development. Qt goes beyond C++ in the areas of inter-object communication and flexibility for advanced GUI development. Qt adds the following features to C++:
- Powerful mechanism for inter-object communication called signals and slots
- Queryable and designable object properties
- Powerful events and events filters
- Contextual string translation for internationalization
- Sophisticated interval driven timers that make it possible to elegantly integrate many tasks in an event-driven GUI
- Hierarchical and queryable object trees that organize object ownership in a natural way
- Guarded pointers that are automatically set to 0 when the referenced object is destroyed, unlike normal C++ pointers which become dangling pointers when their objects are destroyed
- A dynamic cast works across library boundaries.
QML Development with Qt Quick
QML is a declarative, JavaScript-based language designed to describe the user interface of a program: both what it looks like, and how it behaves. In QML, a user interface is specified as a tree of objects with properties, like in JSON.
- JavaScript, HTML and CSS skills can be used to code complete front-end apps
- Optimized for touch-based, animated mobile UIs
- Includes a set of graphical and behavioral building blocks: QML Types
- No C++ knowledge required for UI creation, while it can be extended with C++
Qt for Python
The Qt for Python project provides the PySide6 (and PySide2) module allowing users to develop Qt and QML application easily from Python.
- You can find more information for the project, which is currently available as a Technical Preview, in the wiki page.
- Compatible with Qt 5.11+. Currently in Qt6, Qt for Python is released on a similar cycle as the Qt framework, and supports Python 3.8+ (in Qt 6.6.0)
Qt for Python (PySide6) is the official set of Python wheels that The Qt Company provides.
Find out more about Qt for Python
These are third party language bindings for Qt
PyQt
(PyQt is developed by Riverbank Computing, not to be confused with Qt for Python (PySide) from The Qt Company)
Qt for Ring (RingQt)
RingQt is a binding of the Qt framework to the Ring programming language.
Ring uses Qt as its toolkit to provide cross-platform abilities.
Qt for Java and Kotlin (QtJambi)
QtJambi is Qt bindings for the Java programming language originally developed by Trolltech, the predecessor of The Qt Company.
The successive open source project provides bindings of Qt5 and Qt6 releases for latest Java JDK versions, GraalVM and Kotlin.
Qt for Rust (CXX-Qt)
Safe interop between Rust and Qt using CXX
CXX-Qt is a set of Rust crates for creating bidirectional Rust ⇄ C++ bindings with Qt. It can be used to integrate Rust into C++ applications using CMake or used to build Rust applications with Cargo. CXX-Qt provides tools for implementing QObject subclasses in Rust which can be used from C++, QML, and JavaScript.
Qt for Rust (Rust-Qt)
Qt bindings for the Rust language
Qt Quick for Rust (qmetaobject-rs)
QML bindings for the Rust language
Qt Quick for Rust (qml-rust)
- QML bindings for the Rust language
Qt Quick for Rust (qmlrs)
- QML bindings for the Rust language
Qt Quick for Zig (qml_zig)
- QML bindings for the Zig language
Qt Quick for Zig (zqml)
- QML bindings for the Zig language
Qt for Crystal (qt5.cr)
- Qt bindings for the Crystal language
Qt for Nim (nimqt)
- Qt bindings for Nim
Qt Quick for Nim (nimqml)
- QML bindings for Nim
Qt for Go (qt)
- Qt bindings for Go language
- QML bindings for Go language
Qt for Java (javacpp-presets)
- Qt bindings for Java
Qt for C#/Mono/.Net (QtSharp)
This project aims to create Mono/.NET libraries that wrap Qt thus enabling its usage through C#. It relies on the excellent CppSharp.
Qt for C#/Mono/.Net (Qml.Net)
Qml.Net is cross-platform integration of Qml/QtQuick for .NET Core/.NET Framework/Mono. It is a binding that brings .NET types into JavaScript with full interoperability.
Qt for D (QtE5)
QtE5 is a binding of the Qt framework to the D programming language version 2.
Qt for Haskell (qtHaskell)
The qtHaskell project provides a comprehensive set of Haskell bindings for 50 Qt modules with extensive examples and demo programs including qtHaskell versions of Tetrix, DiagramScene, PathDeform and the Qt Asteroids game which uses FRP (Functional Reactive Programming) techniques to control game states and behaviors.
Qtah
The qtah project provides a set of Haskell bindings for Qt.
Qt for Julia (QML.jl)
This project provides bindings to Julia.
Qt Quick for Haskell (HsQML)
HsQML provides a Haskell binding to the Qt Quick framework. It allows you to write graphical applications where the front-end is written in Qt Quick's QML language (incorporating JavaScript) and the back-end is written in Haskell.
Qt Quick for OCaml (lablqml)
QML Bindings to OCaml.
Node.js and Qt Widgets (NodeGui)
Build performant, native and cross-platform desktop applications with Node.js and CSS like styling. NodeGUI is powered by Qt Widgets which makes it CPU and memory efficient as compared to other chromium based solutions like electron.
Qt Quick for Node.js (Brig)
Qt Quick: The Brig project provides library for Qt Quick framework, making it possible to write graphical applications in JavaScript and QML languages.
QML bindings for Nelson language
Nelson is an array programming language providing a powerful open computing environment for engineering and scientific applications using modern C/C++ libraries and others state of art numerical libraries.
The QML engine enables nelson programs to display and manipulate graphical content using Qt's QML framework. see some examples: https://www.youtube.com/watch?time_continue=1&v=L3fsg4zhTjE