레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시

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


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

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




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"

2010. 9. 6.

Chasing 틴Performance

Chasing performance

Qt Programming을 하다 보면 특정 instance나 Function에서 Resource를 많이 차지 하는 경우가 있다. 이때 어떤 루틴이 자원을 차지 하는지 찾으려고 할때 많이 사용하는 루틴

Qt Code:
  1. QTime time;
  2. time.start();
  3. // 긴 시간이 소요되는 루틴
  4. int difference = time.elapsed();

2010. 8. 26.

Screen Capture

Screen Capture 해보기

Qt에는 QDesktopWindget 이라는 Class가 있어, Application 수준이 아닌 Desktop 수준의 Operation이 가능하게 해준다.
QDesktopWidget ( http://doc.qt.nokia.com/4.6/qdesktopwidget.html )

전체 화면 Capture 예제 (클릭하시면 전체 소스 코드가 보입니다)


여기서 가장 중요한 부분은
13번째 라인의
snapshot = QPixmap::grabWindow(QApplication::desktop()->winId());

인데 grabWindow를 통해 QDesktopWidget()->winId() Desktop 화면 전체를 Capture하거나 일부 영역 혹은 grabWidget() 을 통하여 Widget 영역만 Capture할 수도 있다.

2010. 8. 9.

How to create Qt Plugins

How to create Qt plugins


Qt 는 plugin을 만드는데 2 종류의 API를 제공한다.
  • Higher-level API : Qt 자체의 extention 기능을 Plugin 하기위한 API들
    ex) custum db drive, custum text codec etc.
  • Lower-level API : Qt Application을 extending 하기 위한 API들

Topics:
  • Higher-level API: Writing Qt Extensions
  • Lower-level API: Extending Qt Application
  • Locating Plugins
  • Static Plugins


Higher-level API
Qt 자체의 기능이나 성능을 확장 혹은 변경시키고자 할때 사용되는 방법으며 Plugin 확장을 위한 Base Class들이 제공되어 지며, 이를 활용하여 새로운 Function이나 Macro를 추가해 주면 된다.


Lower-level API
Qt뿐만 아니라 plugin을 통해서 Qt Application의 기능을 확장시킬 수 있는 API들. Low-level api를 detect하고 load하는 것은 QpluginLoader를 통해서 이루어지고, lower-level plugin api는 higer-level보다 임의의 다양한 functionality가 plugin base class와 무관한 기능들도 확장 시킬 수 있다.

  • Plugin을 사용하여 Application단에서 확장하는 법

1. Plugin단에서 연결하여 사용할 수 있는, interface들을 정의하기
(classes with only pure virtual functions)
2. Qt의 meta-object system에서 interface들을 인지 할 수 있도록
Q_DECLARE_INTERFACE() macro를 사용하여 declare를 해준다.
3. Application에서 plugin을 사용할 수 있도록 QPluginLoader를 포함시킨다.
4. Plugin에서 제공되는 interface인지 아닌지 판가름 하려면 qobject_cast() 를 사용하라.

  • Plugin을 구성하는 방법
1. QObject 와 원하는 Plugin기능을 제공하는 interfaces에서 상속받은 plugin class를 Declare하라.
예) class ExtraFiltersPlugin : public QObject, public FilterInterface
2. Qt의 meta-object system에서 interface들을 인지 할 수 있도록, Q_INTERFACES() macro를 이용하라.
3. Q_EXPORT_PLUGIN2() macro를 사용하여, plugin class와 멤버들을 export 시켜라.
4. 적절한 .pro 파일을 만들어서 Plugin을 Build 시켜라.
(예를 들어 Plugin용 .pro, Applicatio용 .pro, 그리고 이 두개의 Project 묶어서 구동 시킬 수 있는 .pro 파일)




  • Example of Plugin windows (Lower-Level API)


bool SomeClassToLoadPlugin::loadPlugin()
{
QDir pluginsDir(qApp->applicationDirPath());
pluginsDir.cd("plugins");
foreach(QString fileName, pluginsDir.entryList(QDir::Files)){
QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
QObject *pPlugin = pluginLoader.instance();
if(pPlugin){
m_pEchoInterface = qobject_cast
(pPlugin);
if( m_pEchoInterface ) return true;
} // end of if pPlugin
}//end of foreach

return false;
}





2010. 8. 4.

Qt의 Virtual Frame buffer : QVFB

Qt의 Virtual Frame Buffer

일반적으로 Embedded용으로 Application을 개발하거나 특정한 그래픽 환경에 맞는 application을 개발하려고 할때에는
주로 Host machine에서 개발 업무를 진행하였다가 Target으로 binary를 전송하는 방식으로 개발하게 된다.
Target machine의 자원적 제약이나 Host machine의 개발상의 편리함 때문이다.




<가상 Framebuffer 상에서 한글 입력 Test Screenshot>

2010. 8. 2.

Qt Configuration

Qt Configuration

Qt를 효율적으로 사용하기 위해서는 자신에게 가장 맞는 Configuration과 사용 목적에 가장 맞는 Compiler를 가지고 Compile하여 사용하는 것이 필요하다.

기본 설정 예제 : MyConfiguration.sh

#!/bin/sh

./configure -prefix /opt/qt -confirm-license -verbose 2>&1 | tee MyConfigure.log

make -j3 | tee MyMake.log



Embedded Device 용 기본 Arm용 설정 예제 : MyEmbeddedConfig.sh

#!/bin/sh

./configure -embedded -prefix /opt/qtEmbed -platform linux-g++ -xplatform linux-arm-g++ -arch arm

make -j3 | tee MyMake.log



Embedded Device 용 Virtual Frame Buffer 사용 Arm 설정 예제 : MyEmbeddedConfig.sh

#!/bin/sh

./configure -embedded -prefix /opt/qtEmbed -platform linux-g++ -xplatform qws/linux-arm-g++ -arch arm -qvfb

make -j3 | tee MyMake.log



Virtual Frame Buffer 는 Qt에서 직접 Frame buffer를 사용하지 않고 가상 Frame buffer 를 만들어 동작하도록 하는 모드로서 Target에 직접 Application을 구동 하지 않고 Host에서 가상 Frame buffer를 Access하도록 개발 환경을 만들어 개발하고 추후 Target에 Application을 올릴 때 유용하게 사용할 수 있다.

2010. 7. 28.

Qt Download

Qt Download 받기

공식적인 Qt Repository http://qt.gitorious.org

Qt를 Download 받을 때는 자신이 사용할 용도에 맞게 Download 받아야 하는데
여러가지 방식중에서 자신에게 알맞는 방법을 선택하여 다운로드 받기를 권장한다.
  1. SDK 로 다운로드 받아 설치하기
    일반적인 사용자에게 추천하는 방법
    Qt의 모든 기능을 다운로드 받아 놓고 사용할 때 택하는 방법

  2. Source를 다운 받아 설치하기
    어느 정도 개발의 경험이 있는 사용자에게 추천하는 방법
    특정한 제품 개발용으로 Qt를 사용하고자 하는 사용자용
    Qt를 내가 원하는 Module만 컴파일하여 사용하거나 속도 개선을 위한 Optimization이 필요한 경우
    Qt를 Embedded 환경에서 사용하고자 할 때 특히 최소 사이즈나 최고 Speed와 같이 Custom한 Qt 환경을 만들고 싶을 때

  3. Mobile Phone Application 개발용으로 Qt를 설치하고자 할 때
    Meego, Maemo, 혹은 Symbian 전용으로 Qt를 사용하고자 할 때는 아래에 기술된 Nokia Qt를 다운로드 받아서 사용하면 편리하다.
    http://www.forum.nokia.com/Develop/Qt/

다운로드 받는 방법들
  • Git 으로 Download 받기
    Git으로 다운로드 받는 경우에는 항상 최신 Update Code를 포함하여 내가 원하는 Version의코드를 받을 수 있는 장점이 있다.

    # git clone git://gitorious.org/qt/qt.git

    보안이 걸려 있는 회사 내와 같은 환경일 경우

    # git clone http://git.gitorious.org/qt/qt.git

    네트워크 환경에 따라 다르지만 필자의 경우 10여분 정도 걸려 다운로드 받았다.
    2010년 7월 현재 시간으로 보았을때 소스가 840여 MB 정도 된다.

    tip) 만일 git을 가지고 있지 않다면
    Windows : http://code.google.com/p/msysgit/downloads/list
    Linux (데미안/우분투계열) : sudo apt-get install git-core
    Linux (Redhat 계열) : yum install git-core

  • Qt SDK 다운로드 받아 사용하기
    http://qt.nokia.com/downloads 를 통해서 Download 받으면 되는데
    LGPL 로 사용할 경우에는 LGPL Tab을 선택해서
    Commecial Version을 사용할 경우는 Commercial Tab을 선택하면 된다.
    LGPL과 Commercial Version은 Source Code상으로 동일하며 이후 Qt Optimize를 설명할 때나오겠지만 Qt 원본 Source를 수정할 수 있는 권리의 차이만 있다. (L-GPL을 참조하세요)
    이때 Qt SDK를 다운로드 받으면 Full Version Qt가 다운 설치되게 된다.

  • Nokia Qt SDK 다운 받아 사용하기
    Mobile Phone Application을 개발하고자 하는 사용자는 Nokia Qt를 다운로드 받으면 개발하기 용이하다.
    http://www.forum.nokia.com/Develop/Qt/

  • Qt만 다운로드 받아 사용하기
    다른 기능 없이 Qt만 사용하거나 Optimize 하려고 할 때 선택하는 방법
    (이후 Blog에서 Qt Optimization 에 관하여 기술 될 예정이다)
    http://qt.nokia.com/downloads 를 통해서 Download 받으면 되는데
    Qt Library를 OS 종류에 맞게 Download 하면 된다.

2010. 7. 23.

Qt Frameworks

Qt Frameworks

Qt를 통하여 Application을 개발하기 위해서는 적절한 Framework를 선택하는 것이 중요합니다.
만일 Qt Programming을 처음 해 보신다면 Widget Framework로 Qt의 Signal/Slot과 Event 시스템에 익숙해 지신 다음 Graphics View Framework, Webkit View Framework, 그리고 QML등으로 사용 영역을 넓혀 보시면 좋겠습니다.

  1. Widget Framework

    단순한 Dialog Box나 Push Button 같은 Widget을 통하여 화면을 구성하는 방식
    가장 일반적인 Qt Programming 으로 알려져 있습니다.
    화면에 그려야 할 Graphical Object의 수가 많아 질수록 화면의 복잡도가 높아 질 수록 Graphics View Framework보다 느리다고 알려져 있습니다.
    QWidget *pWidget = new QWidget();  

    pWidget->show();


  2. Graphics View Framework
    (
    http://doc.qt.nokia.com/4.7-snapshot/graphicsview.html)

    QGraphicsScene과 QGraphicsView를 통하여 화면을 구성하는 Framework
    화면을 구성하는 Graphic Item들을 Indexing 하거나 추가 제거가 용이하고, 화면의 복잡도가 클수록 Widget 방식보다 빠르다고 알려져 있습니다.
    Rotate 및 Transfer가 단순합니다.
    한 개의 Scene에 여러개의 View를 구성할 수 있습니다.
     QGraphicsScene scene;  

    myPopulateScene(&scene);

    QGraphicsView view(&scene);

    view.show();


  3. Webkit View Framework

    QtWebkit Module을 통하여 화면을 Standard HTML로 구성하고 Qt Class instance를 Web View 화면에 포함시키거나 Standard HTML Element들이 Qt Signal/Slot 혹은 Event와 연동하도록 화면을 구성시키는 방식
    HTML이 standard이기 때문에 Ajax 나 java script혹은 External Language나 OS 간 호환성이 뛰어 납니다.
    http://doc.qt.nokia.com/4.7-snapshot/qwebframe.html
    http://doc.qt.nokia.com/4.6/webkit-previewer.html


  4. QML
    (
    http://doc.qt.nokia.com/4.7-snapshot/qdeclarativeexamples.html)
    XML + Java Script 와 같은 형식으로 화면을 구성하는 방식으로, 완벽히 동일하진 않지만 Qt용 Flash ActionScript라고 표현하면 어떨지 개인적으로 생각해 봅니다.
    보통 Declarative View 모듈과 함께 동작하는 경우가 많습니다.


  5. XML + Java Script 와 같은 형식으로 화면을 구성하는 방식으로, 완벽히 동일하진 않지만 Qt용 Flash ActionScript라고 표현하면 어떨지 개인적으로 생각해 봅니다. 화면 구성이 CSS나 JavaScript와 유사해서 C++ Programming이 익숙하지 않은 Web Application 개발자들이 쉽게 Qt에 접근할 수 있습니다.

    Qt Creator 2.0 이상 버전에서 개발하셔야 하고 Qt 4.7 이상 버전을 사용하실 것을 권장 합니다. Qt 4.6.3 에서도 개발은 가능하나 일부 API가 Qt 4.7 에서 추가되거나 변경된 것이 존재하므로 호환성에 문제가 있을 수 있습니다.
    Divx Player 같은 것도 50~60 라인으로 쉽게 구현가능한 것이 장점이나 특히 Embedded 환경에서 Performance를 위해 Hardware 요구 사항이 높습니다.



제가 출판하고자 하는 것이 있어 가지고 있는 소스를 바로 올려 두진 못하겠지만, 단계별로 코드를 수정하여 예제를 올려 보도록 하겠습니다. 몇개의 예제 만으로도 Qt 의 매력에 푹 빠지실 거라고 자신있게 말씀드릴 수 있습니다.

Qt 시작하기



Qt 란 무엇인가?
Qt 는 Cross-Platform Toolkit 으로 단순한 Graphical UI Toolkit 기능부터 Network/Database/Webkit등 Programmer 가 다양한 기능을 다양한 OS에서 쉽게 개발 할 수 있도록 다양한 Component를 제공하는 C++ Toolkit 이다.

Tip: Qt (큐티) 라고 쓰고, 큐트(트는 거의 들리지 않게) 라고 읽습니다.

Prerequirements of Qt
  • C++ Programming 능력
  • Design Pattern을 이해하고 사용할 수 있는 능력
지원되는 OS
  • Unix 계열 OS
    Linux, Android, Macintosh 용 OS들, BSD 계열등등 대부분의 Unix OS가 지원됩니다.
  • Windows 계열 OS
    Windows Vista, Windows XP, WinCE등등 대부분의 Windows 계열 OS가 지원됩니다.

Qt의 종류
  1. Qt
    가장 일반적인 Qt Component (Class)들로 구성되어 있습니다.
    다양한 OS에서 사용할 수 있도록 추상화가 많이 되어 있어, 이식성은 좋으나 Hardware related 가 되어야 하는 부분, 예를 들자면 Multimedia playback이나 Graphic 가속기등의 사용을 위해서는 특정 Hardware용 Plugin개발이 중요합니다.

    장점
    다양한 기능과 다양한 OS를 위해 기능들을 갖추고 있습니다. 누구나 쉽게 Qt Class등을 통하여 안정적으로 빠른 코드를 개발 할 수 있습니다.
    많은 Application 개발 Tool 로 사용되고 있습니다.
    잘 알려진 Chip에서의 Embedded용 Application 개발이 용이합니다. (예: x86, arm, mips)

    단점
    Performance 향상을 위해서 Hardware dependent 한 코드를 추가해야 할 경우가 생기면 해당 Hardware에 Optimized된 Plugin을 추가 개발 해줘야 합니다.
    Plugin 개발은 응당 Hardware optimization을 위해 당연한 것이긴 하지만 아래의 Nokia Qt나 Qtopia의 경우는 특정 칩 계열이나 특정 상품 계열을 위해서 Optimized 된 device driver등이 제공되는 것과 비교해 보면 Plugin Optimization을 위해 Resource 투자를 해야 한다는 것이 아쉬울 수 있습니다.

    Version (2010년 7월 현재)
    현재 stable version은 Qt 4.6.3 이고 develop version은 Qt 4.7 입니다.

    Tip : Qt의 추상화 영역을 간소화 하고, Hardware 가속기를 사용하실 것을 추천합니다.
    최근에는 OpenVG나 OpenGL/ ES 2.0 혹은 DirectFB등을 많이 사용합니다.
    아래 그림에서 OpenVG 윗단에 Optimized된 Plugin을 추가하여 Qt 2D API들이 최상의 성능을 낼 수 있도록 합니다.

    Image출처:
    http://www.khronos.org/openvg/


  2. Nokia Qt SDK
    위의 Qt의 경우에는 Trolltech에서 처음 만들었고 많은 Open Source 개발자 특히 KDE 개발자들의 노력으로 만들어진 집단 지성의 결정체 입니다.
    그런 만큼 다양한 분야의 여러 목적을 위해 각 Component가 Generic하게 개발되어 왔습니다. 그런데 Nokia에서 Qt를 Mobile Application 목적으로 개발한 필요가 생겼고, 이를 위해 개발되어진 것이 Nokia Qt 입니다.
    Mobile 장비를 위한 Component들이 강화된 것이 특징입니다.
    Meego, Maemo, Symbian등의 OS에 많이 Test되어 있고, Optimize 되어 있습니다.

    장점
    위의 Qt Application이 능숙하신 분이라면, 쉽게 Meego나 Maemo, Symbian같은 Mobile 장비 Application을 개발 할 수 있습니다.

    단점
    위의 Generic Qt Component와 100% 완벽하게 동일하지는 않습니다.

    Version (2010년 7월 현재)
    Stable Version은 1.0이고 Develop Version은 1.1이 출시되어 있습니다.


  3. Qtopia ( Qt extended, qpe )
    한때 Qt extended 라고 불렸던 Qtopia는 이름과 다르게 전혀 extended 하지 않습니다.
    현재로서는 Nokia에서 Qtopia에 대한 지원은 공식적으로 전혀 하지 않습니다.
    ( 몇몇 기존에 지원계약을 맺은 아주 큰 모회사등에서는 현재 까지도 지원을 받고 있습니다.)
    성능이 낮은 Chip 이거나 일반적이지 않은 비 Standard interface를 가진 Chip에서 Embedded 용 Toolkit으로 사용되고 있습니다.

    Version : Qt Extended 4.4 가 마지막 버전인데, 추천드리지 않습니다.




홈