2011. 10. 7.
Qt/QML을 iOS (iPhone/iPad) 상에서 구동시키는 법 (QML-ui based)
무엇보다도 먼저 이 글은 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
2011. 8. 9.
QML과 Qt C++ Native 코드를 Integrating 하기
다음의 코드를 통해서 QML 모듈을 C++ native code내에서 실행 시킬 수 있다.
일반적으로 사용되는 component는 QGraphicsObject이지만 QObject의 타입으로도
사용할 수 있다.
[GraphicsScene]
QGraphicsScene *pScene = myExistingGraphicsScene();
QDeclarativeEngine *pEngine = new QDeclarativeEngine;
QDeclarativeComponent component( pEngine, QUrl::fromLocalFile("myQml.qml"));
QGraphicsObject *pObject = qobject_cast
pScene->addItem(pObject);
[Widget]
QDeclarativeView *pQmlView = new QDeclarativeView;
pQmlView->setSource(QUrl::fromLocalFile("myQml.qml"));
2011. 8. 4.
Qt embedded 에서 DirectFB를 통한 Graphical 출력
Configure option에서
# configure "-qpa" ......
을 추가해서 Compile 한 후
# ./qt-application -platform directfb
라고 해주면 qt가 DirectFB를 통해서 출력된다.
하지만 Qt 4.7.x 버전대의 DirectFB를 통한 출력은 다음과 같다.
MyConfigure.sh
export QT_CFLAGS_DIRECTFB="-I/DirectFB설치된Path/include/directfb -D_REENTRANT"
export QT_LIBS_DIRECTFB="-L/DirectFB설치된Path/lib -ldirectfb -lfusion -ldirect -lpthread"
./configure -embedded mips/arm ....
반드시 확인해야할 사항은 -I"path"로 지정한 path에 direct.h가 존재하는지
-L"path"로 지정한 path에 libdirect-xx.xx-1.x.so.0.0 이나 libdirectfb-xx.xx-x.x.so 같은 파일이 존재 하는지 확인해야 한다.
만일 존재하지 않으면 qt compile시 DirectFBError / DirectFBErrorString 같은 것이 refer되지 않는다고 error 처리 된다.
실행시
# ./qt-application -qws -display directfb
와 같이 하면 되는데
실행시 qt rendering이 DirectFB를 통하여 출력되는 것은 stdout을 통하여서도 확인할 수 있다.
2011. 7. 12.
Qt 4.8 설치하기 (Qt Lighthouse)
실제 Qt repository로 들어가게 되었다.
이말의 의미는 Qt 4.8에는 Lighthouse처럼 Qt가 X library나 X windows를 거치지 않고,
직접적으로 Kernel을 통하여 Rendering이 가능하게 된다는 의미가 된다.
따라서 기존에 쓰이는 lighthouse git (git://gitorious.org/+qt-developers/qt/lighthouse.git) 은 더이상 쓰이지 않게 되었으며, 그냥 역사적의미로만 남겨둔다고 한다.
git clone git://gitorious.org/qt/qt.git qt cd qt
git remote add qt git://gitorious.org/qt/qt.git git fetch qt git checkout -b my-local-tracking-branch qt/4.8
2011. 7. 1.
Byte Order conversion in Qt (Qt에서 Endian 전환)
- Endian Conversion Functions
- Qt 에서 엔디안 바이트 전환은 다음의 함수 들을 통해 편리하게 할 수 있다.
#include <QtEndian>
- 한줄을 header파일로 추가 하고 간단히 해결 하였다.
Functions
T | qFromBigEndian ( const uchar * src ) |
T | qFromBigEndian ( T src ) |
T | qFromLittleEndian ( const uchar * src ) |
T | qFromLittleEndian ( T src ) |
void | qToBigEndian ( T src, uchar * dest ) |
T | qToBigEndian ( T src ) |
void | qToLittleEndian ( T src, uchar * dest ) |
T | qToLittleEndian ( T src ) |
Qt 에서 64 bit Data를 Hex값으로 출력하고 싶을 때
물론 Qt 에서 사용하는 QDebug()를 사용하면 된다.
너무 간단한 solution이지만, 실제 코딩할 때 쓸데없이 시간 소모가 되는 경우가 있으므로 정리
uint64_t TimeStamp;
or
qint64 TimeStamp;
qDebug(" Transmit TimeStamp(hex) = %llx ", TimeStamp);
2011. 6. 27.
Android 용 Qt Framework compile 하는 방법
- 최신의 Official Android NDK를 다운로드 하고 설치한다.
- 최신의 Official Android SDK를 다운로드 하고 설치한다.
Android-lighthouse Repository를 Gitorious clone(gitorious에 대한 정보는 Googling해 보시길)
# git clone git://gitorious.org/~taipan/qt/android-lighthouse.git
Prepare & compile Qt
"Qt android-lighthouse" git clone시킨 폴더로 이동하여 "androidconfigbuild.sh"을 실행시킨다.
"androidconfigbuild.sh"을 기존의 qt configure와 동일한 역할을 하며, Qt를 처음 설치할때 한번만 실행시켜 주면 된다.
# cd /path/to/cloneOfandroid-lighthouse/,
# ./androidconfigbuild.sh -n "Android NDK를 설치한 폴더 절대경로" -q 1
만일 이미 설치 환경과 개발 framework가 구성되어 있는 상태에서 Qt만 컴파일 하기를 원한다면 아래와 같이 "-q 1" option을 제거하여 주면 된다.
# ./androidconfigbuild.sh -n "Android NDK를 설치한 폴더 절대 경로"
Android용 Qt-lighthouse 의 컴파일이 완료되면 컴파일된 Qt Library를 Android Device에 넣어 주어야 하는데 다음과 같은 방식으로 QtCreator를 이용하면 된다.
Target 에서 Testing 개발 중일 경우에는
use device Qt library를 check해서 사용
Deploy를 원할 경우에는 Projects->Android (run tab)->Deploy configurations->Deploy local qt libs 옵션 사용
--------------------------------------------------------------------------------
androidconfigbuild.sh 은 아래와 같은 파라메터를 이용할 수 있다.
"androidconfigbuild.sh -p " 를 통하면 아래와 같은 help를 읽을 수 있다.
usage: ./androidconfigbuild.sh options
OPTIONS:
-p Shows this message
-c Clean qt
-q Qt build options
0 - don't configure qt (only compile) default
1 - configure qt and compile qt
-b Build qt
0 - don't build
1 - build
-s Install qt
0 - don't install
1 - install
-n NDK root. Default "/usr/local/android-ndk-r5b"
-o NDK host. Default "linux-x86"
-f NDK toolchain prefix. Default "arm-linux-androideabi"
-v NDK toolchain version. Default "4.4.3"
-a Target cpu architecture. Default "armeabi"
armeabi - tune for android arm v5
armeabi-v7a - tune for android arm v7
Optional name suffix: v5/v7
-h Shared
0 - Build static version of qt
1 - Build shared version of qt
-x Exceptions options
0 - don't use exceptions (you won't be able to build qtcreator with such a qt though)
1 - use exceptions
Optional name suffix: Xc/Nx
-d Build debug qt
Optional name suffix: D/R/DaR
-r Build release qt
Optional name suffix: R/D/DaR
-m Modify install path according to passed in options (name suffixes applied in above listed order).
-i Install path. Default "/home/your-name/path/to/android-lighthouse"
2011. 6. 15.
mips Target Board에서 Webkit을 올릴 때의 난감한 상황 undefined reference to `sinf'
하지만 최근 들어 피해 갈 수 없는 대세인 모듈이 있으니, 두둥 그것은 webkit
QtWebkit을 올리려면 rendering을 하는 측에서 (예를 들어 line이나 curve 등을 그릴때)
sine 이나 cosine 같은 삼각 함수를 쓰게 되는데
오래된 싸구려 mips 칩에서는 이를 지원하지 않는다..
uClibc 0.9.28 이상에서는 floating math 함수들을 지원한다.
uClibc 0.9.27 이하에서는 floating math 함수들을 지원하지 않는다.
문제점으로는 qline이나 curve 함수들이 컴파일 시 Link 되지 않는다.
undefined reference to `sinf'
undefined reference to `cosf'
undefined reference to `logf'
이를 해결 하기 위한 임시 대응책
$QTDIR/src/corelib/kernel/qmath.h
에다가
inline float sinf( float s)
{
return (float)sin(s);
}
양산 후 library 절대 올리기 싫어 하는 경우도 있긴 하지만... 이해는 어렵다...털썩...
2011. 6. 9.
Kbuntu 설치후 Qt 최신 설치할때 많이 요청 되어 지는 라이브러리
2011. 5. 31.
Official Qt Mobility 1.2.0 릴리스
Qt Mobility version 1.2.0 의 새로운 feature로 소개된 것들로는
- 기존 mobility module들의 개선 사항 추가
- Bluetooth device 와의 쉬운 integration 기능
- NFC ready device support
(Near Field Communication : 5m 이내 통신에 유용하며 RFID와 유사합니다)
- 그외 QtMessaging, QtServiceFramework, QtSensors 와 QML 지원 모듈들
http://doc.qt.nokia.com/qtmobility-1.2/index.html
다음에서 다운 로드 받아 사용하실 수 있습니다.
http://get.qt.nokia.com/qt/add-ons/qt-mobility-opensource-src-1.2.0.zip
http://get.qt.nokia.com/qt/add-ons/qt-mobility-opensource-src-1.2.0.tar.gz
Meego 사용자의 경우 : http://download.meego.com/live/devel:/qt-mtf/Trunk/
sudo zypper addrepo http://download.meego.com/live/devel:/qt-mtf/Trunk/ devel-qt-mtf
sudo zypper refresh
sudo zypper install qt-mobility
sudo zypper install qt-mobility-example
Gitorious (깃토리오스) 사용자의 경우
http://qt.gitorious.org/ 에서 Qt-mobility의 'v1.2.0' Tag를 사용하실 수 있습니다.
2011. 5. 30.
Qt Signal 과 QML function 을 연결하기
Native code처럼 정밀한 작업을 하거나 세밀한 조작을 할때는 답답한 부분이 상당히 있다.
그래서 UI 는 QML로 구성하고, 세밀하고 빠른 속도를 요구되어지는 부분은
Qt로 구성하는 경우가 많은데, 이때 주의해야 할 부분이 QML과 Signal/Slot을 Communicate할 수 있느냐이다.
결론부터 말하자면
rootObject() 와 QVariant를 사용해서 Signal/Slot을 QML에서도 사용할 수 있다.
조금 더 상세히 말하자면 QML 파일은 결국 QDeclarativeView를 사용하여 동작이 이루어지게 되는데, 이 QDeclarativeView를 통하여 QML Controller의 pointer를 가져 올 수 있다.
QDeclarativeView view;
view.setSource( QUrl("QML파일.qml"));
QObject *rootObject = dynamic_cast
object의 포인터를 가져 오게 되면 그 다음은 일반 Qt 프로그램과 동일 해 진다.
QObject::connect(rootObject, SIGNAL(.....), &QtClass pointer, SLOT(....));
QObject::connect(&QtClass pointer, SIGNAL(...), rootObject, SLOT(...));
그리고 QML 파일과 Qt Native 사이의 parameter는 QVariant를 통하여 전달 시키면 된다.
NativeFunction( QVariant text ); // Qt
function QMLFunction( text ) // QML
다음의 forum nokia 예제를 참조한다.
<참조>
http://wiki.forum.nokia.com/index.php/CS001625_-_Connecting_Qt_signal_to_QML_function
myclass.h
#ifndef __MYCLASS_H__
#define __MYCLASS_H__
#include <qobject>
#include <qvariant>
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass() {}
public slots:
void getData() {
QString text("New data");
emit data(QVariant(text));
}
signals:
void data(QVariant data);
};
#endif
main.cpp
#include <qapplication>
#include <qgraphicsobject>
#include <qdeclarativeview>
#include "myclass.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyClass myClass;
QDeclarativeView view;
view.setSource(QUrl("./ui.qml"));
view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
QObject *rootObject = dynamic_cast
QObject::connect(rootObject, SIGNAL(dataRequired()), &myClass, SLOT(getData()));
QObject::connect(&myClass, SIGNAL(data(QVariant)), rootObject, SLOT(updateData(QVariant)));
view.setGeometry(QRect(100,100,800, 480));
view.show();
return app.exec();
}
ui.qml
import Qt 4.7
Rectangle {
signal dataRequired;
function updateData(text) { dataText.text = text } // slot
anchors.fill: parent; color: "black"
Text {
id: dataText
anchors.centerIn: parent; color: "white"
}
MouseArea {
anchors.fill: parent
onClicked: dataRequired()
}
}
Qt Cross-compiling with Scratchbox2
Embedded 환경 구축을 위한 Cross-compiling은 누가 뭐래도 지루하고 따분한 일에는 틀림 없다.
특히 Qt와 같이 다양한 기능을 제공하는 Platform Cross-compile에는 더 많은 정성과 신경이 쓰인다.
게다가 Hardware 가속기능이나 멀티미디어 라이브러리를(DirectFB, D-Bus, GStreamer, OpenGL ES)
지원하기 위해서는 Optimization도 많고, Testing까지 생각한다면 Cross-compiling Tool의 사용은
선택이 아니라 필수의 항목일 수 있다.
( 하드웨어 가속기나 멀티미디어 항목은 귀찮치만 신경을 쓰면 쓸수록 Application의 성능과 연관성도 높다)
따라서 Scratchbox2를 반복적으로 쓰면서 나름 편리하다고 느껴진 방법을 정리해 보았다.
1) Scratchbox2를 Host 에 설치한다.
2) 제공된 Board SDK 를 이용하여 root image를 만든다.
3) Target rootfs 루트폴더로 이동한다.
Scratchbox2 의 sb2-init 은 반드시 targetfs 의 root에서 실행 시켜줄 것을 권장한다.
예) cd ~/Tegra2Arm/vibrante-devlite-p1138/targetfs
4) scratchbox 2 env 를 만들어 준다.
예 ) sb2-init Tegra2Qt ~/toolchains/tegra2-x.x.x/bin/arm-none-linux-gnueabi-gcc
sb2-init -c qemu-arm Tegra2QPA ~/toolchains/tegra2-x.x.x/bin/arm-none-linux-gnueabi-gcc
sb2-init [option].... [Target Name] [Compiler:specs] [secondary_compiler]
5) Scratchbox2 가상환경으로 들어 간다.
예) sb2 -t Tegra2QPA
sb2 -t [Target Name]
6) Qt Configuration
- makespec set to use host-g++ and friends (builds tools for host)
- xmakespec set to linux-g++
예) configure -platform linux-tegra2-g++ -arch arm -xplatform linux-g++ -no-neon -graphicssystem raster -opengl es2 -confirm-license -force-pkg-config
여기서 가장 중요한 요소는 -force-pkg-config 인데, opengl es2나 dbus driver들이 제대로 맞물릴 수 있도록
해당 Target pkgconfig 위치가 $PKG_CONFIG_PATH를 정확히 지정 할 수 있도록 한다.
# # qmake configuration for linux-g++ #
MAKEFILE_GENERATOR = UNIX
TEMPLATE = app
CONFIG += qt warn_on release incremental link_prl
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
include(../../common/g++.conf)
include(../../common/linux.conf)
# modifications to g++.conf
QMAKE_CC = sb2 gcc
QMAKE_CXX = sb2 g++
QMAKE_LINK = sb2 g++
QMAKE_LINK_SHLIB = sb2 g++
# modifications to linux.conf
QMAKE_AR = sb2 ar cqs
QMAKE_OBJCOPY = sb2 objcopy
QMAKE_STRIP = sb2 strip
load(qt_config)
- force-pkg-config (we are still cross compiling and hence have to explicitly enable pkg-config use )
export PKG_CONFIG_PATH=$TARGET_DIR/usr/lib:$TARGET_DIR/usr/local/lib
2011. 5. 27.
QML 에서 mp3 file playback
QML은 Qt 용 Application 개발시 UI의 요소를 빨리 개발하기 위한 Markup 언어로,
2011. 5. 26.
Tegra 2 (vibrante)에 Qt Lighthouse 올리기 (1) SDK 설치
기본적으로 vibrante는 두가지 Graphic Output모드를 지원합니다.
하나는 X11을 기본으로 하는 모드고 다른 하나는 OpenKODE를 기본으로 하는 모드입니다.
vibrante-devlite-p1138-15.0105-nv-minimal-sdk.run 를 설치하실 때 유의 하셔야 하는 사항은 "X11"의 설치인데, 현재까지는 Qt의 모든 기능을 문제 없이 사용하시고자 할때는 X11을 설치 하셔야 합니다.
하지만 이번 연재는 Qt Lighthouse를 사용하는 것이 목적이므로 OpenKODE를 설치하는 것을 기본으로 전제합니다.
참고로 Lighthouse는 qws와 달리 X를 거치지 않고 /dev/fb0로 바로 출력 할 수도 있습니다. (platform설정에 따라...)
위 패키지 설치 중 아래와 같은 메시지를 볼 수 있습니다.
Note that X11 is required for Qt and GStreamer. Enter [X] to install X11-enabled drivers and a minimal X server, any other key to skip X11 and use non-X11 (OpenKODE) drivers: