All Projects → Papierkorb → Qt5.cr

Papierkorb / Qt5.cr

Licence: mpl-2.0
Qt5 bindings for Crystal, based on Bindgen

Programming Languages

crystal
512 projects

Projects that are alternatives of or similar to Qt5.cr

Qtsharp
Mono/.NET bindings for Qt
Stars: ✭ 532 (+192.31%)
Mutual labels:  wrapper, gui, qt
Qml Creative Controls
QML controls for creative applications and creative coding
Stars: ✭ 199 (+9.34%)
Mutual labels:  gui, qt, qt5
Nitroshare Desktop
Network file transfer application for Windows, OS X, & Linux
Stars: ✭ 1,150 (+531.87%)
Mutual labels:  gui, qt, qt5
Qt.go
Qt binding for Go (Golang) aims get Go's compile speed again.
Stars: ✭ 487 (+167.58%)
Mutual labels:  gui, qt, qt5
Lqt
Lua Binding for Qt5
Stars: ✭ 30 (-83.52%)
Mutual labels:  gui, qt, qt5
Guitar
Git GUI Client
Stars: ✭ 1,136 (+524.18%)
Mutual labels:  gui, qt, qt5
Examples
Learn to create a desktop app with Python and Qt
Stars: ✭ 1,196 (+557.14%)
Mutual labels:  gui, qt, qt5
Gtkplatform
Run Qt applications using gtk+ as a windowing system.
Stars: ✭ 146 (-19.78%)
Mutual labels:  qt, qt5
Openauto
AndroidAuto headunit emulator
Stars: ✭ 1,926 (+958.24%)
Mutual labels:  qt, qt5
Haruna
Open source video player built with Qt/QML and libmpv.
Stars: ✭ 147 (-19.23%)
Mutual labels:  qt, qt5
Mini Cmake Qt
A minimal CMake template for Qt 5 & 6 projects
Stars: ✭ 156 (-14.29%)
Mutual labels:  qt, qt5
Moneyguru
Future-aware personal finance application
Stars: ✭ 145 (-20.33%)
Mutual labels:  qt, qt5
Globalprotect Openconnect
A GlobalProtect VPN client (GUI) for Linux based on OpenConnect and built with Qt5, supports SAML auth mode.
Stars: ✭ 143 (-21.43%)
Mutual labels:  gui, qt5
Sqlitestudio
A free, open source, multi-platform SQLite database manager.
Stars: ✭ 2,337 (+1184.07%)
Mutual labels:  qt, qt5
Qdarkstylesheet
A dark style sheet for QtWidgets application
Stars: ✭ 1,952 (+972.53%)
Mutual labels:  qt, qt5
Nuxhash
A NiceHash cryptocurrency mining client for Linux.
Stars: ✭ 150 (-17.58%)
Mutual labels:  gui, desktop-application
Dotherside
C language library for creating bindings for the Qt QML language
Stars: ✭ 140 (-23.08%)
Mutual labels:  bindings, qt
Kshare
The free and open source and cross platform screen sharing software.
Stars: ✭ 151 (-17.03%)
Mutual labels:  qt, qt5
Porymap
Map editor for pokeemerald, pokefirered, and pokeruby
Stars: ✭ 164 (-9.89%)
Mutual labels:  gui, qt
Qhexview
A versatile Hexadecimal widget for Qt5
Stars: ✭ 168 (-7.69%)
Mutual labels:  qt, qt5

Qt5 bindings for Crystal

Bindings for the Qt5 Framework using bindgen.

Table of Contents

Project Goals

  • Just Works™ - Drop the dependency into a project, and use it
  • Providing an API that feels native to Crystal
  • Focus on the GUI components (i.e. QtCore, QtGui, QtWidgets)

Installation

If you just want to develop a Crystal app which uses Qt5, use the master-ready-to-use branch. It contains pre-built/pre-generated bindings for certain platform and Qt combinations. If that branch contains the pre-generated bindings for your platform, which you can verify in the subdirectory ext/, you won't need bindgen at all.

dependencies:
  qt5:
    github: Papierkorb/qt5.cr
    branch: master-ready-to-use

If you want the bindings to be generated for the current system, or if you want to generate bindings for new platform and Qt combinations, use the master branch:

dependencies:
  qt5:
    github: Papierkorb/qt5.cr
    branch: master

In any case, your users will be required to have the Qt5 libraries on their system because this project defaults to binding to Qt libraries dynamically. (See more on this under License below.)

Additional development dependencies

Using your system's package manager:

  • ArchLinux pacman -S qt5-base
  • Debian apt-get install qtbase5-dev
  • Ubuntu apt-get install qtbase5-dev

User perspective

Sample Crystal-Qt5 code

Have a look in samples/!

A short Hello World snippet looks like this:

require "qt5"

qApp = Qt::Application.new

label = Qt::Label.new "Hello from Crystal/Qt!"
label.show

Qt::Application.exec

hello-qt

Developer perspective

Generating the bindings

If you want to work on qt5.cr itself or you want to generate bindings for new versions, then as mentioned you need to use branch master and run the generation yourself.

These steps can be followed from a project using qt5.cr, or from within qt5.cr itself. For the latter, you can just go to lib/bindgen and do git checkout master instead of modifying shard.yml.

Important: For this you'll also have to meet the dependencies of bindgen.

Naming scheme

As qt5.cr supports many different versions of Qt on different platforms, generated bindings follow a naming scheme. The scheme contains 4 components as follows:

KERNEL - LIB_C - ARCH - qtVERSION, e.g. linux-gnu-x86_64-qt5.13

Where:

  • KERNEL is the OS kernel, e.g. linux, darwin, windows
  • LIB_C is the lib C name, e.g. gnu, musl, win32
  • ARCH is the architecture, e.g. i686, x86_64, arm
  • VERSION is the Qt version, e.g. 5.9, 5.12, 5.15

The naming scheme is not strictly enforced. However, it should always end with -qtVERSION!

(Re)generating all Qt5 binding versions

The master-ready-to-use branch contains a number of prebuilt bindings. The following process was used to build them:

  1. Cd into the qt5.cr directory, switch to the master branch
  2. Edit support/generate_bindings.cr and enable all versions for which you want to generate the bindings
  3. Run crystal support/generate_bindings.cr
  4. Commit the files in ext/ to the master-ready-to-use branch

The build process will automatically download, unpack, build, and generate all configured versions of Qt5. It'll store the downloaded and unpacked Qt5 versions to directory called download_cache/. Subsequent invocations of that script will use these cached assets.

The first run may take a long time, and each version of Qt5 will take up about 4GB of disk space.

(Re)generating a specific Qt5 binding version

  1. Use the master branch of qt5.cr in your shard.yml
  2. Decide which version of Qt to use, and build the scheme (See above)
  3. Export the binding scheme: export BINDING_PLATFORM=linux-gnu-x86_64-qt5.13
  4. If you're not using your system's Qt: export QMAKE=/path/to/qmake
  5. Run bindgen as usual: lib/bindgen/tool.sh qt.yml --stats
  6. Verify with crystal spec

Future things to do

  • Forwarding qHash() of wrapped types (to Object#hash)
  • Integration with LibEvent: Right now, Qt blocks the whole thread.
  • The rest of the billion Qt classes of interest
  • Everything in the to be done category
  • Integration for the Qt Designer UI designer
  • Integration for Qt Linguist
    • Localization/Translation for your applications!
  • UI test library, with adapter for spec
    • Also, actual tests - Let's catch whacko bugs right in the CI!
  • Automated copy (and adaption) of the Qt documentation, for easy Crystal-specific docs
    • The Qt Docs license should allow this if done correctly

Platform Support

System Status Qt version OOTB?
ArchLinux Works always 5.12 YES
Ubuntu 17.04 Works 5.9 YES
Ubuntu 16.04 Works 5.5 YES
MacOS Help wanted ? ?
Windows Help wanted ? ?
Other systems Help wanted ? ?

Ready-to-use Qt versions: 5.5 to 5.12

(This list needs updating)

Contributing

  1. Open a new issue on the project to discuss what you're going to do and possibly receive comments
  2. Read bindgen's STYLEGUIDE.md for some tips
  3. Then do the rest, PR and all. You know the drill :)

Contributors

License

The Qt bindings, including the generated and manually-written parts, are subject to the MPL-2 license. You can find a copy attached of the full license text in the LICENSE file.

This project claims no copyright on the Qt framework or of any of its trademarks, source, or any other assets.

A note on Qt's license

A common misconception is that you have to pay for Qt to use it in closed-source applications.

This project assumes you'll link to Qt dynamically. In this case, you can use Qt free of charge including for closed-source, commercial applications under the terms of the LGPL.

You can build closed-source applications using Crystal, this shard, and Qt for free.

Note: This section is to combat this misconception, the authors of qt5.cr are in no way responsible to check if the same terms apply in your jurisdiction.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].