Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

go-qml

2,539 views

Published on

Go Seoul Meetup

Published in: Software

go-qml

  1. 1. go-qml Go언어와 QML로 시작하는 GUI프로그래밍 GDG Korea Golang 김재훈(jaehoon@gmail.com) 2015.1.24 1
  2. 2. go-qml? - Gustavo Niemeyer 2
  3. 3. go-qml? - Gustavo Niemeyer 3
  4. 4. go-qml? - Gustavo Niemeyer - Go와 QML을 이용한 GUI pkg - https://github.com/go-qml/qml - http://godoc.org/gopkg.in/qml.v1 4
  5. 5. go-qml? - Gustavo Niemeyer - Go와 QML을 이용한 GUI pkg - https://github.com/go-qml/qml - http://godoc.org/gopkg.in/qml.v1 - Ubuntu, Ubuntu Touch, Mac OS X, Windows 5
  6. 6. go-qml? - Gustavo Niemeyer - Go와 QML을 이용한 GUI pkg - https://github.com/go-qml/qml - http://godoc.org/gopkg.in/qml.v1 - Ubuntu, Ubuntu Touch, Mac OS X, Windows - LGPL v3 6
  7. 7. GUI pkgs 7
  8. 8. GUI pkgs - go-gtk (https://github.com/mattn/go-gtk) - wxGo (https://github.com/JeroenD/wxGo) - go-webkit (https://github.com/mattn/go-webkit) - go-ui (https://github.com/visualfc/go-ui) : qt - walk (https://github.com/lxn/walk) : only windows - etc... 8
  9. 9. go-qml : requirement - Go >= 1.2, Qt 5.x 를 사용 - Go 1.2 이상은 godeb로 설치 가능 9
  10. 10. install : ubuntu - Go 설치(godeb 사용) 10
  11. 11. install : ubuntu - Go 설치(godeb 사용) $ ARCH=amd64 $ wget -q https://godeb.s3.amazonaws.com/godeb-$ARCH.tar.gz $ tar xzvf godeb-$ARCH.tar.gz godeb $ sudo mv godeb /usr/local/bin $ godeb install 11
  12. 12. install : ubuntu - Qt 설치 12
  13. 13. install : ubuntu - Qt 설치 $ sudo add-apt-repository ppa:ubuntu-sdk-team/ppa $ sudo apt-get update $ sudo apt-get install qtdeclarative5-dev $ sudo apt-get install qtbase5-private-dev $ sudo apt-get install qtdeclarative5-private-dev $ sudo apt-get install libqt5opengl5-dev $ sudo apt-get install qtdeclarative5-qtquick2-plugin 13
  14. 14. install : ubuntu - go-qml pkg 설치 14
  15. 15. install : ubuntu - go-qml pkg 설치 $go get gopkg.in/qml.v1 15
  16. 16. install : etc - Windows, MAC은? https://github.com/go-qml/qml#installation 16
  17. 17. go-qml : examples - controls - customtype - gopher - imgprovider - modelview - painting(-es2) - particle - qmlscene - qrcpacking - reparent - snapweb 17
  18. 18. QML? 18
  19. 19. QML? - Qt Framework UI를 만들기 위한 일종의 스크 립트 언어 19
  20. 20. QML? - Qt Framework UI를 만들기 위한 일종의 스크 립트 언어 - QML(Qt Meta-Object Language) 20
  21. 21. QML? - Qt Framework UI를 만들기 위한 일종의 스크 립트 언어 - QML(Qt Meta-Object Language) - CSS와 비슷 21
  22. 22. QML? - Qt Framework UI를 만들기 위한 일종의 스크 립트 언어 - QML(Qt Meta-Object Language) - CSS와 비슷 - Qt를 사용하는 언어들 - C++, Python, Java, Ruby, Basic, Ada ... 22
  23. 23. QML? import QtQuick 2.0 Rectangle { id: page width: 500; height: 200 color: "lightgray" Text { id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font.bold: true } } 23
  24. 24. go-qml : basic skeleton func main() { err := qml.Run(run) ... } 24
  25. 25. go-qml : basic skeleton func main() { err := qml.Run(run) ... } func run() error { engine := qml.NewEngine() component, err := engine.LoadFile(“file.qml”) if err != nil { return err } win := component.CreateWindow(nil) win.Show() win.Wait() return nil } 25
  26. 26. go-qml : helloworld helloworld.qml + helloworld.go (Exam1) 26
  27. 27. go-qml : manipulator - QML의 객체들을 Go에서 조작(Exam2) - Qt(c++) 에서는 connect 를 사용해서 signal과 slot을 연결 - Go에서는 Window객체의 On 을 통해서 signal과 slot을 연결 27
  28. 28. go-qml : manipulator - Go의 변수/ 타입을 QML에서 사용(Exam3, 4) - func (ctx *Context) SetVar(name string, value interface{}) - func RegisterTypes(location string, major, minor int, types []TypeSpec) type TypeSpec struct { Init interface{} Name string Singleton bool } 28
  29. 29. go-qml : manipulator - 이름(변수명..)의 소문자 변경 value.Name => value.name value.UPPERName => value.upperName value.UPPER => value.upper 29
  30. 30. go-qml : manipulator - Setter, Getter (Exam5) type Person struct { Name string } func (p *Person) SetName(name string) { p.Name = name } func (p *Person) Name() { return p.Name } 30
  31. 31. go-qml : manipulator - Paint (Exam6) - Go Type에 Paint 리시버를 제공된다. - OpenGL 사용 - qml.RegisterType(...) 으로 QML 에 제공 31
  32. 32. go-qml : manipulator - 리소스 패키징 - genqrc : resource 파일들을 go파일로 Pack - 설치 $ go get pkg.in/qml.v1/cmd/genqrc - 사용의 편리를 위해서 $GOPATH/bin/ 에 생성되어 있는 genqrc를, /usr/local/go/bin 으로 이동 32
  33. 33. go-qml : manipulator - 리소스 패키징 - 리소스 사용(경로지정) : some/path -> qrc:///some/path component, err := engine.LoadFile(“qrc:///some/path”) 33
  34. 34. go-qml : manipulator - 리소스 패키징 (Exam7) - genqrc 사용법 genqrc [options] <subdir1> [<subdir2> …] : subdir 에 있는 리소스들을 qrc.go 파일로 pack : Go 1.4에서는 go generate 사용 //go:generate genqrc code images $ go generate 34
  35. 35. go-qml : manipulator - 리소스 패키징 - qrc.go 개발 중에는 매번 갱신할 필요는 없다. export QRC_REPACK=1 : qrc.go를 갱신 하지 않고 변경된 내용을 확인 가능 35
  36. 36. go-qml : manipulator - QML의 객체들을 Go에서 조작 - Go의 변수/ 타입을 QML에서 사용 - 이름(변수명..)의 대소문자 변경 - Setter, Getter - Painting - 리소스 패키징 36
  37. 37. 감사합니다. 37
  38. 38. references - https://github.com/go-qml/qml - http://gihyo.jp/admin/serial/01/ubuntu-recipe/0351 - http://godoc.org/gopkg.in/qml.v1 - http://blog.qt.digia.com/blog/category/qml_start/ - http://qt-project.org/wiki/Category:LanguageBindings/P100 - http://blog.labix.org/2014/09/26/packing-resources-into-go-qml-binaries - http://godoc.org/gopkg.in/qml.v1/cmd/genqrc - http://blog.golang.org/generate - http://www.youtube.com/watch?v=FVQlMrPa7lI&list=PL8pIUS2fXtPasFbh9 3g7JaB1YEFj2bOMn 38

×