Cute (Qt) binding for Go (Golang) with support for Windows / macOS / Linux / FreeBSD / Android / iOS / Sailfish OS / Raspberry Pi / AsteroidOS / Ubuntu Touch / JavaScript / WebAssembly
Find a file
2016-10-04 18:12:55 +02:00
androidextras env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
bluetooth env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
core env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
dbus env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
designer env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
gamepad env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
gui env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
help env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
internal env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
location env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
macextras env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
multimedia env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
network env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
nfc env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
positioning env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
printsupport env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
purchasing env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
qml env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
quick env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
sailfish env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
script env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
scripttools env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
scxml env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
sensors env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
serialbus env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
serialport env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
sql env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
svg env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
testlib env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
uitools env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
webchannel env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
webengine env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
websockets env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
widgets env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
xml env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
xmlpatterns env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
.gitignore build minimal binaries 2016-05-28 18:18:42 +02:00
LICENSE complete rewrite 2015-10-24 17:18:24 +02:00
qt.go fix signal table cleanup 2016-08-26 15:33:11 +02:00
README.md env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
setup.bat env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00
setup.sh env vars for deps + fix static link order + amd64 ios-sim + buildtags + winextras + x11extras 2016-10-04 18:12:55 +02:00

Screenshots

Windows

macOS

Linux

Android

Portrait

Landscape

iOS

Portrait

Landscape

Sailfish OS



Installation

You will need at least 8gb ram to install this binding!


Windows

  1. Install Go >= 1.7.1 and setup a proper GOPATH

  2. Install Qt 5.7.0; you can also define a custom location with QT_DIR

  3. Add the directory that contains gcc and g++ to your PATH

    • C:\Qt\Qt5.7.0\Tools\mingw530_32\bin\
  4. Download the binding

    • go get -d github.com/therecipe/qt
  5. Generate, install and test (~20 min)

    • cd %GOPATH%\src\github.com\therecipe\qt && setup.bat
  6. Create your first application

macOS

  1. Install Go >= 1.7.1 and setup a proper GOPATH

  2. Install Qt 5.7.0; you can also define a custom location with QT_DIR

  3. Install Xcode >= 7.2.0

  4. Download the binding

    • go get -d github.com/therecipe/qt
  5. Generate, install and test (~20 min)

    • cd $GOPATH/src/github.com/therecipe/qt && ./setup.sh
  6. Create your first application

Linux

  1. Install Go >= 1.7.1 and setup a proper GOPATH

  2. Install Qt 5.7.0; you can also define a custom location with QT_DIR

  3. Install g++ and OpenGL dependencies

    • Debian/Ubuntu (apt-get)

      • sudo apt-get -y install build-essential libgl1-mesa-dev
    • Fedora/RHEL/CentOS (yum)

      • sudo yum groupinstall "C Development Tools and Libraries"
      • sudo yum install mesa-libGL-devel
    • openSUSE (zypper)

      • sudo zypper install -t pattern devel_basis
  4. Download the binding

    • go get -d github.com/therecipe/qt
  5. Generate, install and test (~20 min)

    • cd $GOPATH/src/github.com/therecipe/qt && ./setup.sh
  6. Create your first application


Android

  1. Install the desktop version for Windows, macOS or Linux

  2. Install the Android SDK in C:\android-sdk\ or /opt/android-sdk/; you can also define a custom location with ANDROID_SDK_DIR

  3. Install the SDK dependencies with C:\android-sdk\tools\android.bat or /opt/android-sdk/tools/android

    • Tools
      • Android SDK Build-tools (24.0.3)
    • Android 7.0 (API 24)
      • SDK Platform
    • Extras (Windows only)
      • Google USB Driver
  4. Install the Android NDK in C:\android-ndk\ or /opt/android-ndk/; you can also define a custom location with ANDROID_NDK_DIR

  5. Install Java SE Development Kit (Linux: install in /opt/jdk/); you can also define a custom location with JDK_DIR

  6. Install and test (~20 min)

    • cd %GOPATH%\src\github.com\therecipe\qt && setup.bat android

      or

    • cd $GOPATH/src/github.com/therecipe/qt && ./setup.sh android

  7. Create your first application

iOS

  1. Install the desktop version for macOS

  2. Install and test (~20 min)

    • cd $GOPATH/src/github.com/therecipe/qt && ./setup.sh ios && ./setup.sh ios-simulator
  3. Create your first application

Sailfish OS

  1. Install the desktop version for Windows, macOS or Linux

  2. Install VirtualBox; you can also define a custom location with VIRTUALBOX_DIR

  3. Install the Sailfish OS SDK; you can also define a custom location with SAILFISH_DIR

  4. Install and test (~20 min)

    • cd %GOPATH%\src\github.com\therecipe\qt && setup.bat sailfish && setup.bat sailfish-emulator

      or

    • cd $GOPATH/src/github.com/therecipe/qt && ./setup.sh sailfish && ./setup.sh sailfish-emulator

  5. Create your first application


Raspberry Pi

  1. Install the desktop version for Linux

  2. Create a folder ~/raspi

    • mkdir ~/raspi
  3. Download and unpack the Qt 5.7.0 source

    • cd ~/raspi && wget https://download.qt.io/official_releases/qt/5.7/5.7.0/single/qt-everywhere-opensource-src-5.7.0.tar.gz
    • tar -xzf qt-everywhere-opensource-src-5.7.0.tar.gz qt-everywhere-opensource-src-5.7.0
  4. Patch Qt Source

    • cd ~/raspi/qt-everywhere-opensource-src-5.7.0/qtbase && sed -i 's/c++1z/c++11/' ./mkspecs/devices/linux-rpi3-g++/qmake.conf

    • cd ~/raspi/qt-everywhere-opensource-src-5.7.0/qtwayland && wget https://github.com/qtproject/qtwayland/commit/75294be3.patch && patch -p1 -i 75294be3.patch

  5. Download the cross compiler

    • cd ~/raspi && git clone --depth 1 https://github.com/raspberrypi/tools.git
  6. Get dependencies and install Arch Linux on your SD card

  7. Start your Raspberry Pi

  8. Enable root login over ssh

    • export RASPI_IP=192.168.XXX.XXX (replace XXX.XXX with the valid ip ending)

    • ssh alarm@$RASPI_IP (password: alarm)

    • su (password: root)

    • sed -i 's/#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config && sed -i 's/prohibit-password/yes/' /etc/ssh/sshd_config && systemctl restart sshd.service

  9. Update and install dependencies (~5 min)

    • pacman -Syyu

    • pacman -S fontconfig icu libinput libjpeg-turbo libproxy libsm libxi libxkbcommon-x11 libxrender tslib xcb-util-image xcb-util-keysyms xcb-util-wm freetds gtk3 libfbclient libmariadbclient mtdev postgresql-libs unixodbc assimp bluez-libs sdl2 jasper libmng libwebp gst-plugins-base-libs libpulse openal gst-plugins-bad hunspell libxcomposite wayland gst-plugins-base libxslt gst-plugins-good ffmpeg jsoncpp libevent libsrtp libvpx libxcursor libxrandr libxss libxtst nss opus protobuf snappy xcb-util xcb-util-cursor xcb-util-renderutil xcb-util-xrm libxfixes libxshmfence libxext libx11 libxcb libice weston ttf-freefont lxde gamin xorg-server xorg-xinit xorg-server-utils mesa xf86-video-fbdev xf86-video-vesa xorg-server-xwayland xf86-input-libinput gst-plugins-ugly sqlite2 cups xorg-server-devel rsync

    • pacman -Scc

    • Raspberry Pi 1

      • sed -i 's/gpu_mem=64/gpu_mem=128/' /boot/config.txt
      • echo "exec startlxde" >> ~/.xinitrc && mkdir ~/.config/ && echo -e "[core]\nbackend=fbdev-backend.so\nmodules=xwayland.so" >> ~/.config/weston.ini
      • echo "dtoverlay=vc4-kms-v3d,cma-128" >> /boot/config.txt && sed -i 's/fbdev-backend/drm-backend/' ~/.config/weston.ini (experimental: enable OpenGL under X; will break most applications)
    • Raspberry Pi 2 or 3

      • sed -i 's/gpu_mem=64/gpu_mem=256/' /boot/config.txt
      • echo "exec startlxde" >> ~/.xinitrc && mkdir ~/.config/ && echo -e "[core]\nbackend=fbdev-backend.so\nmodules=xwayland.so" >> ~/.config/weston.ini
      • echo "dtoverlay=vc4-kms-v3d,cma-256" >> /boot/config.txt && sed -i 's/fbdev-backend/drm-backend/' ~/.config/weston.ini (experimental: enable OpenGL under X; will break most applications)
    • reboot

  10. Get sysroot for cross compiling (password: root) (~5 min)

    • cd ~/raspi && mkdir sysroot sysroot/usr sysroot/opt

    • rsync -avz root@$RASPI_IP:/lib sysroot --delete

    • rsync -avz root@$RASPI_IP:/usr/include sysroot/usr --delete

    • rsync -avz root@$RASPI_IP:/usr/lib sysroot/usr --delete

    • rsync -avz root@$RASPI_IP:/opt/vc sysroot/opt --delete

  11. Prepare sysroot

    • cd ~/raspi && wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
    • chmod +x sysroot-relativelinks.py && ./sysroot-relativelinks.py sysroot
  12. Build Qt (~2 h)

    • cd ~/raspi/qt-everywhere-opensource-src-5.7.0

    • Raspberry Pi 1

      • ./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -make libs -skip webengine -nomake tools -nomake examples -extprefix /usr/local/Qt5.7.0/5.7/rpi1 -I ~/raspi/sysroot/opt/vc/include -I ~/raspi/sysroot/opt/vc/include/interface/vcos -I ~/raspi/sysroot/opt/vc/include/interface/vcos/pthreads -I ~/raspi/sysroot/opt/vc/include/interface/vmcs_host/linux -silent
    • Raspberry Pi 2

      • ./configure -opengl es2 -device linux-rasp-pi2-g++ -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -make libs -skip webengine -nomake tools -nomake examples -extprefix /usr/local/Qt5.7.0/5.7/rpi2 -I ~/raspi/sysroot/opt/vc/include -I ~/raspi/sysroot/opt/vc/include/interface/vcos -I ~/raspi/sysroot/opt/vc/include/interface/vcos/pthreads -I ~/raspi/sysroot/opt/vc/include/interface/vmcs_host/linux -silent
    • Raspberry Pi 3

      • ./configure -opengl es2 -device linux-rpi3-g++ -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -make libs -skip webengine -nomake tools -nomake examples -extprefix /usr/local/Qt5.7.0/5.7/rpi3 -I ~/raspi/sysroot/opt/vc/include -I ~/raspi/sysroot/opt/vc/include/interface/vcos -I ~/raspi/sysroot/opt/vc/include/interface/vcos/pthreads -I ~/raspi/sysroot/opt/vc/include/interface/vmcs_host/linux -silent
    • make -k -i && sudo make -k -i install

  13. Prepare the Qt directory

    • sudo chown -R $USER /usr/local/Qt5.7.0/
  14. Install and test the binding (~20 min)

    • Raspberry Pi 1

      • cd $GOPATH/src/github.com/therecipe/qt && ./setup.sh rpi1
    • Raspberry Pi 2

      • cd $GOPATH/src/github.com/therecipe/qt && ./setup.sh rpi2
    • Raspberry Pi 3

      • cd $GOPATH/src/github.com/therecipe/qt && ./setup.sh rpi3
  15. Notes

    • run startx & before starting an application with -platform xcb (qml/quick applications won't work; they may work with Qt 5.8)

    • run weston & or weston --tty=1 & (via ssh) or create your own compositor before starting an application with -platform wayland-egl (qml/quick applications won't work; they may work with Qt 5.8)

    • you can increase the available gpu memory by editing /boot/config.txt

  16. Create your first application



Example

  1. Create a project folder [GOPATH]/src/qtExample

  2. Create a file [GOPATH]/src/qtExample/main.go

package main

import ( "os"

	"github.com/therecipe/qt/core"
	"github.com/therecipe/qt/widgets"

)

func main() { widgets.NewQApplication(len(os.Args), os.Args)

	//create a button and connect the clicked signal
	var button = widgets.NewQPushButton2("Click me!", nil)
	button.ConnectClicked(func(flag bool) {
		widgets.QMessageBox_Information(nil, "OK", "You clicked me!", widgets.QMessageBox__Ok, widgets.QMessageBox__Ok)
	})

	//create a layout and add the button
	var layout = widgets.NewQVBoxLayout()
	layout.AddWidget(button, 0, core.Qt__AlignCenter)

	//create a window, add the layout and show the window
	var window = widgets.NewQMainWindow(nil, 0)
	window.SetWindowTitle("Hello World Example")
	window.SetMinimumSize2(200, 200)
	window.Layout().DestroyQObject()
	window.SetLayout(layout)
	window.Show()

	widgets.QApplication_Exec()

}


3. Open the { command-line | terminal | shell } in `[GOPATH]/src/qtExample` and run `qtdeploy build desktop`

4. You will find the application in `[GOPATH]/src/qtExample/deploy/[GOOS]/qtExample`

5. Take a look at the [examples](https://github.com/therecipe/qt/tree/master/internal/examples)

6. Make yourself familiar with the [Qt documentation](https://doc.qt.io/qt-5/classes.html)