9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

therecipe/qt を用いて Go から GUI を利用する方法(Windows/Mac)

Last updated at Posted at 2020-04-24

https://github.com/therecipe/qt を用いて Go から Qt を使うための環境構築のメモ。

まずはじめに書いておかなくてはいけないのは、このライブラリは Qt の大部分をカバーしているらしく、それを Go から利用でき Mac/Windows/Linux でも動作するとてつもなく有益なライブラリであると言うこと・・ただ一つの弱点をのぞいて・・。

それは、ビルドに時間がかかりすぎると言うこと。
参考までに、2013 モデルの MacBook Air で超簡単なサンプルを実行(go run/go build)するのに 30 秒、Windows だと 2 分強(Core i7 4770k/MEM16GB)
いろいろ調べてみたけどこれはもうこう言う物らしい。
C++ だとインクリメントビルドがあるからクリーンビルドとかするとこのくらいかかるのかもしれないけど、通常だと 5 秒くらいだと思われ、Go の長所であるコンパイル速度がここまで跡形もなく消えて無くなっているのはほとんどの人には受け入れられないのではないかと個人的には思っている。
何か速くする方法があるのであれば教えて欲しい。コンパイル速度以外はあまりにも素晴らしいライブラリ/開発環境なので・・。

このコンパイル時間が受け入れられる場合に限って続きを読むことを推奨する。

Mac

https://github.com/therecipe/qt/wiki/Installation-on-macOS を参考にインストールを進めること。
ただし、Mac の場合以下の問題により GO111MODULE=on では動作しない。
undefined: NewQByteArrayFromPointer #1041
大人しく GO111MODULE=off で利用すること。

また、Windows の環境も同様だが Qt のバージョンは上記手順に書かれている物に合わせること。
この記事執筆時のバージョンは 5.13.0(https://download.qt.io/official_releases/qt/5.13/5.13.0/qt-opensource-mac-x64-5.13.0.dmg)
ただしこの記事では brew install で入れたので brew が使える人はこっちの方が簡単

brew install qt

次に環境変数を以下のように定義する

export PATH=/usr/local/opt/qt/bin:$PATH
export LDFLAGS="-L/usr/local/opt/qt/lib"
export CPPFLAGS="-I/usr/local/opt/qt/include"
export PKG_CONFIG_PATH="/usr/local/opt/qt/lib/pkgconfig"
export QT_HOMEBREW=true

以下のサンプルプログラムを準備する

main.go
package main

import (
	"os"

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

func main() {
	core.QCoreApplication_SetApplicationName("sample")
	core.QCoreApplication_SetOrganizationName("sample")
	core.QCoreApplication_SetAttribute(core.Qt__AA_EnableHighDpiScaling, true)

	widgets.NewQApplication(len(os.Args), os.Args)

	window := widgets.NewQMainWindow(nil, 0)
	window.SetMinimumSize2(400, 300)
	window.SetWindowTitle("Hello World")
	window.Show()

	widgets.QApplication_Exec()
}

ビルドする前に以下のコマンドを実行する

export GO111MODULE=off
xcode-select --install
go get -v github.com/therecipe/qt/cmd/...
$(go env GOPATH)/bin/qtsetup -test=false

以下のようにして main をビルドする

go build main.go

私の環境ではこのビルドに 30 秒かかるのがこのライブラリの懸念点だと認識している。

Windows

https://github.com/therecipe/qt/wiki/Installation-on-Windows を参考にインストールを進めること。
Mac の環境も同様だが Qt のバージョンは上記手順に書かれている物に合わせること。
この記事執筆時のバージョンは 5.13.0(https://download.qt.io/official_releases/qt/5.13/5.13.0/qt-opensource-windows-x86-5.13.0.exe)
インストール時にはメールアカウントが必要になる。
とりあえず試したいと言う人は quickmail を使うなりするといいかもしれない。

qt-opensource-windows-x86-5.13.0.exe を実行し、mingw(64-bit)と表示されているビルドとツール配下の2項目を追加でチェックしてインストールする。

次に環境変数を以下のように定義する

QT_DIR=C:\Qt\Qt5.13.0
QT_QMAKE_DIR=C:\Qt\Qt5.13.0\5.13.0\mingw73_64\bin
PATH に以下を追加
C:\Qt\Qt5.13.0\5.13.0\mingw73_64\bin
C:\Qt\Qt5.13.0\Tools\mingw730_64\bin

以下のサンプルプログラムを準備する

main.go
package main

import (
	"os"

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

func main() {
	core.QCoreApplication_SetApplicationName("sample")
	core.QCoreApplication_SetOrganizationName("sample")
	core.QCoreApplication_SetAttribute(core.Qt__AA_EnableHighDpiScaling, true)

	widgets.NewQApplication(len(os.Args), os.Args)

	window := widgets.NewQMainWindow(nil, 0)
	window.SetMinimumSize2(400, 300)
	window.SetWindowTitle("Hello World")
	window.Show()

	widgets.QApplication_Exec()
}

ビルドする前に以下のコマンドを実行する

set GO111MODULE=on
go mod init test
go get -v github.com/therecipe/qt
go install -v -tags=no_env github.com/therecipe/qt/cmd/...
go mod vendor
git clone https://github.com/therecipe/env_windows_amd64_513.git vendor/github.com/therecipe/env_windows_amd64_513
for /f %v in ('go env GOPATH') do %v\bin\qtsetup

以下のようにして main をビルドする

qtenv
go build main.go

qtenv により mingw g++ などへのパスが通り、それを用いてビルドを行う模様。
私の環境ではこのビルドに 2 分かかるのがこのライブラリの懸念点だと認識している。
この問題さえなければ積極的に使っていきたいのだが・・。

以上

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?