2014. 5. 30.

MAC User를 위한 Qt 사용팁

Mac 의 경우에는 Application 이 bundle 의 형태로 묶어져서 제공되기 때문에 Mac에서 개발 했을 경우 표준 I/O가 연계되지 않아서 불편한 경우가 있다.
해당 경우에는 다음과 같은 Tip을 사용하면, 일반 적인 standard I/O를 사용하는 Application을 제작할 수 있다.


mac {
   CONFIG -= app_bundle
}



# qmake -project
# qmake -spec macx-g++
# make


Multi-platform 에서 사용할 Common.pri

Qt의 가장 큰 장점은 Multi-platform용 Application을 제작할 수 있다는 점이다.
하지만 실질적으로 코드를 개발하다 보면 코드를 Qt로만 제작하는 경우는 거의 없고, 실제적으로는 Open Source 코드도 사용하게 되고, 다른 라이브러리도 포함하여 사용하게 된다.

그런 경우에 Windows 계열과 Unix 계열의 차이로 인하여 Project 파일을 수정해 주어야 하는데 반복적인 귀찮은 작업이므로, 다음과 같이 정리한다.


include (/path/to/wherever/common.pri)


# required if you want to see qDebug() messages
CONFIG += debug

# place auto-generated files in "invisible" subdirectories
win32{
   MOC_DIR = _moc
   UI_DIR = _ui
   OBJECTS_DIR = _obj
} else {
   MOC_DIR = .moc
   UI_DIR = .ui
   OBJECTS_DIR = .obj
}

# rules below apply to TEMPLATE=app projects only:
app{
   # place executable in same folder:
   destdir=$$OUT_PWD
   # don't place executables in an app bundle on mac os
   # this also permits console apps to work on the mac
   mac {
      CONFIG -= app_bundle
   }

   # Open a console for stdin, stdout, and stderr Windows:
   win32{
      config += console
   }
}



2014. 3. 30.

Ubuntu / Kubuntu 에서 간단하게 Qt 설치하기

블로그 글을 읽는 분들의 위치와 관심있어 하는 분야를 살펴보면
생각외로 (혹은 나의 관심 사항과는 상관없이)
'Qt 설치하기'가 항상 최고의 클릭수를 차지하고 있다.

무엇이든지 처음 시작하는게 제일 어려운 일인듯 하다.
오늘 쓰여질 글은
Ubuntu / Kubuntu 에서 간단하게 Qt 설치하기 이다.

Ubuntu는 이미 워낙 잘 알려져 있는 리눅스 배포판이니, 추가적으로 설명드릴 필요는 없을 것 같고 Kubuntu는 조금 설명드려야 할 것 같다.
Kubuntu는 KDE Ubuntu를 의미하는 Ubuntu와 동일한 Core를 가지는 데미안 리눅스이다.

차이가 있다면 Ubuntu는 Gnome을 기본 Desktop UI 환경을 가지는 리눅스 배포판이고, Kubutu는 KDE를 기본 Desktop UI 환경으로 가지는 리눅스 배포판인것이다.

Kubuntu = KDE + Ubuntu


물론 Ubuntu 설치해 놓고, Desktop UI 환경을 KDE로 변경하여 설치할 수도 있겠지만 필요없는 Gnome 환경들이 남아 있는 것이 마음에 거슬리고, 또 모든 것이 Qt Based로 구동되는 KDE에 비해 효율성이 떨어지는 것을 참기 힘드신 분들은 Kubuntu를 사용하시면 되겠다.

Ubuntu나 Kubuntu와 같은 데미안 계열의 배포판에서는 Application 설치를 위해서 aptitude 나 apt-get을 사용하는데 보통 다음과 같이 사용한다.

$ aptitude search "찾고 싶은 app"
$ sudo apt-get install "설치하고 싶은 app"

aptitude 가 설치 되어 있지 않는 경우에는

$ sudo apt-get install aptitude 

라고 하면 aptitude를 설치해 주는 식인것이다.

$ aptitude search qt

라고 입력하면 qt와 관련된 app들이 죽 나열된다.

$ aptitude search qt | grep qt4 

라고 하면 qt4에서 사용되는 경우만 필터링 된다.
필터링된 것들 중에 자신이 설치하고 싶은 app들을 다음과 같이 입력해 주면 된다.

$ sudo apt-get install build-essential 

여기서 build-essential 은 유닉스(리눅스) 개발자들이라면 반드시 설치하게될 모듈인데, 일반적으로 개발자들이 사용하게될 기본적인 필수 app등을 모아둔 일종의 Toolbox라고 보면 된다.
Qt도 유닉스 개발환경이기 때문에 위에 있는 build-essential을 설치해 주어야 한다.
그 외에는 다음과 같이 입력하면 설치 완료

$ sudo apt-get install qt4-dev-tools qt4-qmake libqt4-dev qimhangul-qt4

결과는 다음과 같이 진행된다.




Application에서 사용될 Icon Loading



Application의 Icon 로딩

QIcon을 App에 로딩시키기


요구조건:

Multi-platform 지원
Icon을 읽어들여 Application에서 사용할 수 있도록 한다.


Application에서 사용하는 Icon을 사용할 수 있는 방법은 

QApplication app(argc, argv);
app.setWindowIcon(QIcon(“:/res/ticon_256.png”));

하지만 Mac과 Windows의 경우에는 자체 Icon 형식을 가지고 있으므로, 다음과 같이 해당 OS의 형태에 맞도록 Application compile시 외부에서 로딩 하도록 해 주어야 한다. 

Windows:

RC 파일
         IDI_ICON1               ICON    DISCARDABLE     "myappico.ico"

myApplication.Pro 파일 내에서 다음과 같이 RC 파일을 포함 시켜 주어야 한다.

        RC_FILE = myapp.rc

MAC

myApplication.Pro file 내에서 다음과 같이 icon 파일을 포함시켜 주어야 한다.

        ICON = myapp.icns


Unix 계열의 경우에는 다음과 같이 처리한다.

setWindowIcon  사용 예제









2014. 3. 23.

Qt Cloud 서비스: Enginio

Qt 5.2.1 을 설치하다 보면, 다음과 같이 Qt Cloud Service를 선택하는 부분이 존재한다.

Qt Cloud Service Enginio

국내 개발자 중에 해당 서비스를 사용해 본 분이 있을까요?

추후 Qt Cloud Service Enginio에 관한 글도 계속하여 연재해보도록 하겠습니다.


Qt Multiplatform 개발 환경 구축을 위한 PATH / QMAKESPEC / QTDIR 설정하기



PATH / QMAKESPEC / QTDIR 설정하기


Qt로 개발환경을 결정하는 개발자의 가장 큰 이유는 아마 Multi-platform 일것이다.
내가 익숙하게 사용하는 개발 환경에서 한번만 개발 해두면 다양한 여러 환경에서 동작하는 Application을 만들 수 있다는 것은 대단한 장점이다.

Multi-Platform 사용시 자주 사용하는 환경변수는 PATH / QMAKESPEC / QTDIR 의 3가지 인데 3가지 변수만 잘 변경시켜 주면 컴파일시 큰 어려움없이 개발을 진행할 수 있다.

PATH

qmake나 Multi-platform에서 사용될 컴파일러, Toolchain들을 실행시킬 수 있는 변수들을 지정해 주어야 하며 다른 개발툴들의 Path 지정 방법과 동일하다.

QMAKESPEC

이 부분이 Qt를 사용하지 않았던 모글들이 가장 어려워하는 부분일 수 있는데 쉽게 설명하자면 특정 Platform에서 사용될 컴파일러 위치 및 Qt library 위치를 저장하고 관리하는 폴더이다. 보통 다음의 그림 이미지에서처럼 Qt Creator에서 관리되고 있다.

QTDIR

Qt 사용자중에서 작은 footprint를 원하는 개발자들이나 embedded 개발환경 Legacy library들을 사용하고자 하는 개발자들은 4.8.x 대를
iOS 개발환경이나 Android 개발 환경 혹은 QML을 사용하여 개발을 하고자하는 개발자들은 5.2.x 대의 개발환경을 사용하는 것 같다.
이와 같은 자신이 사용할 Qt 의 위치를 지정하는 환경변수이다.
5.2.1 버전에서는 다음과 같이 android_armv5 / android_armv7 / ios 지원용 폴더들이 추가되어 있다.




사용예제


Mac 개발 환경

export QTDIR=/Users/$USER/Qt/5.2.1/
export PATH=$QTDIR/clang_64/bin:$PATH

Unix(Linux) 개발 환경

export QTDIR = /usr/local/qt
export QMAKESPEC=/usr/local/qt/mkspecs/linux-g++
export PATH=$QTDIR/bin:$PATH

Windows 개발 환경


QTDIR = P:\QT\4.7.0
PATH = %QTDIR%\bin
QMAKESPEC=%QTDIR%\mkspecs\win32-msvc2005

2011. 10. 7.

Qt/QML을 iOS (iPhone/iPad) 상에서 구동시키는 법 (QML-ui based)

Qt/QML 를 iOS 상에서 구동시키는 방법

무엇보다도 먼저 이 글은 Eike Ziller의 Qt Labs Developer Blogs 의 글을 기반으로 쓰여 졌으며 그의 Original글은 (http://labs.qt.nokia.com/2011/08/09/update-on-uikit-lighthouse-platform/)을 통해 확인 할 수 있음을 알린다.

이 글의 목적은 원본 글에서 나타나는 바와 같이 pre-Qt 4.8 이나 pre-Qt 5 에서 제공된 UIKit plugin의 기능을 사용하여 QML/Qt가 iOS device에 동작 혹은 Qt application 사용 가능함을 보여주는 데 있을 뿐이지, 현재 Qt가 공식적으로 iOS를 사용하는 device들을 지원함을 의미하지 않습니다. 특히 아래글은 iOS Device에서 QML-based GUI 를 사용하는 방법에 대해서 기술하고 있습니다.
그리고 현재 cocoa (Mac support) plugin이 아닌 UIKit (iOS support) plugin은 모든 Qt class들의 성능을 보장하지 않습니다.

20011년 9월말 현재 Qt/QML 을 iOS 상에서 구동시킬 수 있는 방법은 다음과 같다고 알려져 있습니다.
1) Qt-iPhone Project
http://www.qt-iphone.com
2-1) Qt 4.8 lighthouse (QPA open source)
https://qt.gitorious.org/qt
2-2) Qt 4.8 lighthouse (QPA close source)
3) Qt 5.0
https://qt.gitorious.org/qt/qt5

각 Plugin의 장단점과 제약 사항에 대해서는 이글의 범위에 벗어 나므로, 기회가 있을 때 다른 블로그 글을 통해 소개 드리도록 하겠습니다.
제가 이 글을 통해 여러분에게 소개하려는 case는 2-1 Qt 4.8 lighthouse open source를 통한 방법입니다.
그리고 위에 상태에 대한 원본글은 다음과 같습니다. 참조 바랍니다.

There is general work being done in Qt 4.8 to ensure that it is iOS-compatible when it is released. There are two plugins being developed for Qt on iOS, but only one of them is currently open source. The open source plugin (aka. proof-of-concept UIKit plugin) was developed at Nokia, is (currently) part of Qt 4.8 and was discussed in a QtLabs blog post (in February?). That plugin however is only able to run simple QML apps and does not support more advanced features like auto-rotation, multi-touch, OpenGL, retina displays & widgets.
The other plugin (aka. Qt iOS plugin) is currently closed source, supports full Qt GUI with widgets, multi-touch, multi-threaded OpenGL, shader effects, Qt3D, Qt Scenegraph & parts of Qt Mobility. This is the plugin that was used to make some YouTube demo videos (in Oct/Nov last year) & was shown on the iPad at QtCS.
The Qt iOS plugin is currently being used to produce a trial-run application for submission to the Apple App Store, and more information etc. about that plugin will be made available once it has passed the App Store trial-run and can be considered for commercial application development.
PS. The qt-iphone project is unrelated to these efforts and will most likely never be able to be used to run QML on iOS (if it is in fact still being developed). The purpose of that project is to be able to use Qt to write native UIKit applications. The purpose of Lighthouse (and the iOS plugins for it) is to be able to build and run standard Qt applications on iOS.


준비 해야 할 사항
1) Mac OS X machine ( Lion 혹은 Snow Leopard )
2) XCode 설치 http://developer.apple.com/technologies/tools/
만일 OS 텐 라이언을 사용하고 계시다면 XCode 4, OS 텐 스노우 레오퍼드를 사용하고 계시다면 XCode 3를
설치하셔야 합니다.이후 설명은 Mac OS X Lion + XCode 4를 사용하고 계시는 것을 기준으로 설명드립니다.
3) Qt SDK 설치 (optional) http://qt.nokia.com/downloads/
Repository에 존재하는 example이 아닌 Qt module을 만들거나 Template들을 가져오고자 할때 쓰입니다.
4) MacPorts 설치 (optional) http://www.macports.org/
Gitorious를 사용하기 위해 필요합니다. dmg 파일을 다운로드 받아 사용하시면 편합니다.

Qt 4.8 가져오기
Gitorious Tool은 아무 것이나 사용하셔도 됩니다.
Qt repository를 Cloning 해 줍니다.
# git clone git://gitorious.org/qt/qt.git qt
(Qt의 전체 소스를 가져오기 때문에 시간이 조금 걸립니다)
# cd qt
원격 레포지토리를 로컬 레포지토리로 추가
# git remote add qt git://gitorious.org/qt/qt.git
# git fetch qt
# git checkout -b my-local-Qt4.8 qt/4.8

위와 같이 하면 4.8의 소스 코드가 다운로드 됩니다.
자신의 branch를 확인해 보고 싶으시다면
# git branch -a
와 같이 해보면 됩니다. 정상적으로 되었다면 *my-local-Qt4.8 과 같이 본인이 만든 branch 이름 앞에 (*)표시가 되어 있습니다.

Qt의 shadow build
일반적인 경우는 normal build를 해도 관계없지만 iOS용으로 Qt를 compile 하실 경우에는 shadow build를 추천드립니다.
왜냐하면 xcode에서 device용과 simulator용을 구분하기 때문에 한 디렉터리에서 device용과 simulator용을 번갈아가며 컴파일하게 되면 어려운 점이 발생할 수 있습니다. 저의 경우를 예를 들자면 다음과 같이 디렉터리를 구성하였습니다.

drwxr-xr-x 21 HoTaeWang staff 714 10 6 14:16 Qt-BuildiOS-device/
drwxr-xr-x 21 HoTaeWang staff 714 10 6 14:33 Qt-BuildiOS-simulator/
drwxr-xr-x 36 HoTaeWang staff 1224 10 6 14:27 qt/


Configure 파일 만들기
Qt-BuildiOS-device 폴더에는 다음과 같은 Qt-iOS-device.sh 셀스크립트를 만들었습니다.

#!/bin/sh

../qt/configure -qpa -xplatform qpa/macx-iphonedevice-g++ -arch armv7 -no-neon -developer-build -release -opengl es2 -no-accessibility -no-qt3support -no-multimedia -no-phonon-backend -no-webkit -no-scripttools -no-openssl -no-sql-mysql -no-sql-odbc -no-cups -no-iconv -no-dbus -static -nomake tools -nomake demos -nomake docs -nomake examples -nomake translations

해당 셀스크립트 실행
# . ./Qt-iOS-device.sh
# make -j4
-j(n) option은 자신의 CPU의 성능에 따라 선택할 것

UIKit plugin compile 하기
# cd src/plugins/platforms/uikit
# make


Qt-BuildiOS-simulator 폴더에는 다음과 같은 Qt-iOS-simulator.sh 셀스크립트를 만들었습니다.

#!/bin/sh

../qt/configure -qpa -xplatform qpa/macx-iphonesimulator-g++ -arch i386 -developer-build -release -opengl es2 -no-accessibility -no-qt3support -no-multimedia -no-phonon-backend -no-webkit -no-scripttools -no-openssl -no-sql-mysql -no-sql-odbc -no-cups -no-iconv -no-dbus -static -nomake tools -nomake demos -nomake docs -nomake examples -nomake translations

해당 셀스크립트 실행
# . ./Qt-iOS-simulator.sh
# make -j4
-j(n) option은 자신의 CPU 성능에 따라 선택할 것

UIKit plugin compile 하기
# cd src/plugins/platforms/uikit
# make
Qt와 UIKit plugin 까지 compile이 성공하였다면 Qt for iOS 세상에 들어올 준비가 모두 끝난 것이다.

다음으로 해야 할 일은 XCode 4를 실행 시키고
qt/src/plugins/platforms/uikit/examples에서 XCode project를 열어 실행시키면 된다.
XCode Toolbar에서 iPhone Simulator 4.3/iPad Simulator 4.3을 선택하고 Run Key를 누르면 아래와 같은 동영상을 확인 하실 수 있을 것이다.

예제 실행 동영상
http://www.youtube.com/watch?v=glv_E3KOYuA&feature=player_embedded

XCode 4의 다른 Project를 만들고 싶다면 https://qt.gitorious.org/qt/qt/blobs/4.8/src/plugins/platforms/uikit/README
를 참조해서 새롭게 만들 수 있습니다.

긴글 읽어 주셔서 감사합니다.
수정 해야 하거나 조금 더 가르침을 주실 사항이 있으시면 언제든지 comment나 e-mail 주십시요.

http://developer.qt.nokia.com/wiki/HowToQtQmlOnTheIOS