Help us understand the problem. What is going on with this article?

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

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

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

それは、ビルドに時間がかかりすぎると言うこと。
参考までに、2014 モデルの 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 分かかるのがこのライブラリの懸念点だと認識している。
この問題さえなければ積極的に使っていきたいのだが・・。

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした