Qt5 binding for Go (Golang) without CGO that aims to achieve Go's native compile speeds. Instead of using common bindings and heavy C++ wrapper code that forces you to compile and link time and time again, Qt.Go uses FFI so there's only a runtime dependency.
- Binding code with no CGO compile cost
- Popular Qt5 packages (widgets/QML/extras) support
- Simple go-uic, go-rcc tools
- full signal/slot support
- protected method override support
- default arguments and value wrapper functions
- Class/Method/Function/Enum comment for godoc
- Go side signal/slot definition (experimental)
All platforms should be supported, for now some of them are tested:
- Archlinux/Ubuntu16+
- MacOS
- Android
- Windows
- go 1.9+
- libffi
- dlfcn (windows)
Make sure libffi is installed
Debian based: apt-get install libffi-dev
Arch based: pacman -S libffi
MacOS: brew install libffi
go get -v -u github.com/kitech/qt.go
git clone https://github.com/kitech/qt.inline.git
cd qt.inline
cmake .
make
cp libQt5Inline.so /usr/lib/libQt5Inline.so
go get -v -u github.com/kitech/qt.go/cmd/go-uic
go get -v -u github.com/kitech/qt.go/cmd/go-rcc
package main
import "os"
import "github.com/kitech/qt.go/qtwidgets"
func main() {
app := qtwidgets.NewQApplication(len(os.Args), os.Args, 0)
btn := qtwidgets.NewQPushButton1("hello qt.go", nil)
btn.Show()
app.Exec()
}
More complex examples: https://github.com/kitech/qt.go/examples/ https://github.com/qtchina/qt.go.demos/
Go side signal/slot: syntax document usage demo
- QQ groupchat 933636020
- Telegram room https://t.me/qtdevjiaoliu (Thanks https://github.com/xiayesuifeng)
Qt.Go uses FFI to call wrapped Qt functions and methods, so there is no compile/link time dependency on Qt, only a run time dependency.
This should make the development and testing phases much faster.