'QT'에 해당하는 글 5건

GTK와 GDK

QT 2010. 4. 11. 19:52

1. GIMP Toolkit

* 양해의 글 - 저도 어설프게 나마 알고 있는 부분들이라 객관적인 사실과 특성에 있어서 틀린 부분이 있을 수 있겠습니다. 바르게 고쳐 알려주신다면 자료를 찾아보고 변경하겠습니다.

GTK는 "GIMP Toolkit"의 약자이다.

  • 그럼 GIMP는 무엇인가 리눅스에 관심이 있는 사람들이라면 한번쯤 들어봤을만한 이미지 편집기이다.
    바로 리눅스에서 사용할 수 있는 포토샵인것이다 두둥 (과장이 너무 심한건가 ㅡ.ㅡ).

  • 본인도 별로 똑똑한 사람은 아니라 정확히는 모르고 GIMP를 만들기 위해 존재했었다는 얘기를 들었던 기억이 있다. 하지만 지금은 어떤가 GTK의 Tutorial을 보면 이런말이 가장 처음 적혀있다. "GTK (GIMP Toolkit) is a library for creating graphical user interfaces" 그렇다 GUI를 만들기 위한 툴킷 라이브러리이다.

2. GDK

GDK와 우리가 가장많이 할일은 그리기와 Event이다.

  • "GDK 라이브러리는 GTK+ 위젯(어플리케이션)과 윈도우 시스템을 이어주는 추상적 계층을 제공해줍니다" 라고 '그놈 플랫폼 아키텍쳐 개관'란에 적혀있다. -_-; 그 이전은 본인도 안해봐서 잘은 모르겠으나 듣기로는 GTK와 GDK의 구분이 없었다고 한다. 하지만 지금은 GTK와 윈도우 시스템 사이에 GDK가 있다.

    실제로 X Window든 MS Windows든 플랫폼과의 대화는 GDK가 맡아서 하고 GTK는 GDK와 좀더 쉬운 대화를 하는것이다. Event나 Drawing처럼 X Window와 친하게 지내야하는 작업들을 GTK와 플랫폼(일반적으로 X Window) 사이에서 처리 해 주는것이다. 그뿐 아니라 Font, Style, 이미지제어등 GUI의 중요한 부분들을 담당하고 있다. GTK는 이러한 GDK를 이용하여 구조적인 부분을 담당한다.

    현재에는 Xlib을 래핑하고 있는것은 GDK이다. GTK는 그 GDK를 이용하는것이다.

3. GTK와 GDK 그리고 X Window

X Window에서의 GUI 구현을 편리하게하고 개발자를 여유롭게 만들어 준다.

  • 우리가 X Window에서 GUI를 만들려면 어떻게 해야할까? 가장 기본적인 방법으로는 Xlib을 이용하여 개발하는것이 있다. 이것은 매우 귀찮고 어려울 수 있는 일이다.

    Xlib은 X Window에서 GUI 개발을 할 수 있는 가장 기본적인 라이브러리이다. 화면에 필요한 Widget들을 그려내고 GUI뿐만 아니라 X Window 시스템에 관련된 대부분의 기능을 지원하지만 원초적인 정보와 기능들만을 제공한다. 개발자가 Xlib을 사용하여 GUI부분을 구현한다면 직접 정보를 관리하고 안정성을 책임져야한다.

  • GTK와 GDK를 사용한다면 Xlib이 해주는 역할외에도 GUI 프로그램을 제작함에 있어 필요한 대부분의 유형과 기능들을 미리 구현해 놓았다.

    GTK와 GDK도 X Windows에 실제로 무언가 표시할때나 X Window에 관련된 작업을 할때는 Xlib을 사용한다. 결국 Xlib을 사용하지만 이부분은 모두 GTK와 GDK가 내부적으로 처리해주는것이다. 그럼 GTK와 GDK는 그냥 Xlib 래핑 해 놓은것 아니냐라고 할 수 있겠으나 그렇다고 하기엔 GTK와 GDK는 너무나 많은 일을 대신해주고 많은 부분을 확장하여 미리 만들어 놓았다.

    버튼 하나만 보더라도 Xlib은 가장 기본적인 부분만 처리해 준다. 버튼을 화면에 그리고 이벤트 처리하고 정도이다. 하지만 GTK와 GDK는 버튼을 구현함에 있어 관련된 대부분의 필요한 정보들과 기능을 확장하여 미리 준비해놓았기 때문에 우리는 그것을 사용하면 된다. 또한 기본적인 Widget들을 GUI 프로그램에서 일반적으로 사용하는 다양한 형태로 변이시켜서 새롭게 구성해 놓았다.

  • Xlib에 ToggleButton이 있는지 잘 모르겠으나 단순히 예를 하나 들어주겠다.

    만약 Xlib에는 그냥 버튼만 있다라고 하자. ToggleButton같은 경우 GUI 프로그램에서 많이 사용된다. Xlib을 사용할 경우 사용자는 기본으로 Button을 가지고 ToggleButton에 맞게 직접 구현해야한다. 버튼의 Toggle 상태를 저장, 상태에 따른 버튼 모양, 그에 따른 사용자 정의 이벤트등을 구현하는것은 매우 귀찮은 일이다.

    GTK와 GDK는 이러한일을 미리 해 놓은 것이다. (이는 Xlib에 ToggleButton이 없다라고 가정하고 예를 들었다. 본인도 Xlib의 구성요소가 무엇인지 잘 모른다).

  • 물론 아주 특수한 상황까지 고려되어있는것은 아니지만 GUI 프로그램을 제작함에 있어 불편함을 느낄수 없을만큼 많이 준비되어있다.

  • Xlib은 X Window 시스템을 제어하기 위한 가장 기본적인 라이브러리이고 GTK와 GDK는 GUI 프로그램 개발에 필요한 툴킷 라이브러리 인것이다. 개발자는 GUI를 구현하기 위해 엄청난 시간을 보내야하는것이 아니라 비지니스로직등의 구현에 더 많은 시간을 할애하고 GUI관련해서는 GTK와 GDK에 맡기면 되는것이다.

4. GTK를 사용한다면?

  • 아래의 소스를 보자
<x11></x11>    #include <X11/Xlib.h>



main()

{

Display *d ;

Window w, root ;



d = XOpenDisplay(NULL) ;



root = XDefaultRootWindow (d);

w = XCreateSimpleWindow ( d, root, 50, 50, 400, 300,

2, BlackPixel (d,0), WhitePixel(d,0) );

XMapWindow (d, w);

XFlush (d);



getchar();



XCloseDisplay (d);

}

  • 위의 내용이 Xlib을 이용해 창을 하나 띄우는 예제이다. (이만용님의 <X 윈도우 프로그래밍 기초과정>에서 발췌). 당장 창하나 띄우는 소스만 보더라도 왠지 복잡하다. 파라미터도 많고 알아야할것도 많다(앞으로도 누누히 말하겠지만 소스코드가 짧다고 그것이 전부는 아니다. 그 속에 담긴 뜻을 알아야한다).

  • 그럼 이것을 GTK를 이용할때는 어떻게 하면 되는가 아래를 보자.
    #include <gtk/gtk.h>



int main(int argc, char *argv[])

{

GtkWidget *window;



gtk_init (&argc, &argv);



window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

gtk_window_resize(GTK_WINDOW(window), 100, 100);

gtk_widget_show (window);



gtk_main ();

}<gtk></gtk>

  • 조금 더 간결하고 명확해졌으며 파라미터도 적다. 지금 당장은 큰 차이가 없어 보일지 모르겠으나 규모가 커지고 기능이 많아진다면 GTK의 편리함을 직접 느끼게 될 것이다. 단지 구현하는것이 편리해지고 소스코드의 길이가 짧아지는 차원 정도로만 본다면 큰 오산이다. 구현이 쉬워지는것은 분명하지만 짧아지고 길어지는건 경우에 따라 다르다.

    또 지금 보고 있는것이 전부가 아니다. Xlib을 이용한다면 직접 구현했어야할 Window와 관련된 정보와 기능을 상당히 많이 제공한다. Xlib을 이용하게 되면 이것저것 생각하고 유의해 주어야할것들을 GTK가 많이 처리해주어서 개발자를 덜 귀찮게 한다.

  • Xlib을 이용해 개발을 하면 Xlib을 사용하면서 XWindow의 매우 코어한 부분들까지 생각해주어야 한다. 반드시 그래야만 문제없는 프로그램을 만들어 낼 수 있다. 하지만 GTK와 GDK를 이용하면 GTK에 대해서만 상세히 알면된다. 나머지는 GTK와 GDK에서 충분히 안정적이고 우수하며 편리하게 준비되어져있다. 그렇다고 함수 몇개만 알면 된다는건 아니다. gtk_widget_show를 했을때 GTK와 GDK에서 내부적으로 어떤일이 발생하는것일지에 대해 생각하며 개발을 해야한다.

    모든 프로그램 개발이 마찬가지다.
    훌륭한 프로그래머라면 그래야한다고 생각한다. (본인은 그렇지 않은듯하다. 조금도 훌륭하지 않은 프로그래머임이 분명하다 ㅡ.ㅡ)

  • 또 하나의 장점이 있다면 다양한 환경에 적용할 수 있다는것이다. GTK와 GDK로 짠것은 일반적이라면 소스코드의 수정없이 여러 시스템 환경에서 사용할 수 있다. X Window에서도 사용할 수 있고 DirectFB에서도 사용할 수 있다. 심지어는 MS Window에서도 사용할 수 있겠으나 하지 말자. OS를 뛰어넘은 멀티플랫폼을 원한다면 그냥 자바로 하는게 좋겠다.

  • 자 그럼 GTK와 GDK라는 놈이 X Window에 종속된 놈이 아니란것은 이제 알겠다. 드문 경우이지만 DirectFB를 이용하여 임베디드 GUI개발도 가능하다.

5. 우리나라에서 GTK로 밥먹고 살 수 있나?

임베디드

  • 리눅스 환경에서의 임베디드는 대부분 QT관련 제품군(?)을 주로 사용한다. 돈을 주고 사야해서 그렇지 라이센스 부분에서 걸리는것도 적고 또 훌륭한(?) 개발환경을 제공받을 수 있다. 기업주의 입장에서는 당연한 선택이다 개발자 또한 당연히 선택해야할런지도 모른다.

    GTK를 사용한다고 생각해보자. GTK 개발용 라이브러리는 LGPL인것으로 알고 있다. 다만 제반 환경들은? 하드웨어에 맞게 각종 패키지들을 조금이라도 수정했다면? 그 중에 GPL인것이 있다면? 개발을 의뢰한 고객에게 충분히 알아들을 수 있게 공지하고 소스코드를 오픈하는 준비를 해야한다.제품 개발을 하청을 받은 경우 충분히 문제가 발생할 수 있다.

  • GTK를 이용해 직접 개발한 프로그램에 대해서는 GPL을 적용할 필요는 없겠지만 제반환경을 갖추느라 라이센스가 복잡해질수있다. 어떤거 어떤거 어떤거는 GPL 소스가 약간 변경됐으니 공개해야합니다. 뭐 이런 것을 고객에게 인지시키고 계약서에 넣어야한다는 것이다.

  • QT를 사용한다해도 리눅스를 이용하면 완전히 자유로울수는 없으나 비교적 깔끔한 편이다. 거의 QT에서 다 지원하고 제공한다. X 를 띄울 필요도 없으며 또한 Qtopia같이 훌륭한 놈도 있다.

  • 다만 외국에서는 GTK를 이용해 임베디드를 하는 경우가 종종 있다고 들었다.

GTK는 무조건 X를 띄워야하는가?

  • DirectFB를 사용해 본 바 아직은 완전하지 않지만 몇가지를 제외하곤 상당히 잘 작동했다. 하지만 QT같은 상용과 비교하기에는 무리가 있다. 돈을 받고 만들었다면 당연히 제품다운 제품을 만들어야하는것이다. 아직까지는 GTK를 이용해 만들려면 X Window에서 작동시키는것이 바람직하다.

응용프로그램

  • 리눅스 데스크탑환경이 국내시장의 30%만 차지해도 충분히 가능한 얘기이겠지만 현재로선 대략 GG다.

어렵다

  • 다른것도 하면서 부가적으로 아주 특수한 경우에라면 모를까 GTK만 해서는 밥먹고 살기 어렵다. 차라리 QT를 이용 한다면 임베디드 개발자로 먹고 살 수 있다.

6. 그럼 왜하나?

  • 본인은 그냥 한다. ㅡ.ㅡ 그럼 취미로만 하느냐? 꼭 그렇지 많은 않았다 적어도 얼마전까진 전에 다니던 회사에서 GTK로 SI를 진행했던적이있다. 모 대기업에서 기획 설계하고 서브화면 빼고 순수하게 본수로만 400본정도 되는 약간 큰 프로젝트였다.

    GTK로 온라인 캐쥬얼 게임도 제작한 적도 있었다. 거기다가 모 호텔의 컨트롤 패드를 납품할 기회가 오는듯했으나 초반 준비중 무산됐다.

    전 회사에서 하라고 해서 시작했고 직장을 옮긴 지금은 잘난척하는거 밖에 안된다. (별로 잘난것도 없으면서 말이다 --;)

  • 이렇게 말을 많이 하고도 결론은 왜 아직 없나? 있다. 그냥 하잔거다. ㅡ.ㅡ 이유는 없지만 그냥 해보자 그것이 좋아서든 뻐기고 싶어서든 재미있어서든 뭐든지 간에 말이다.

  • 수 많은 X Window용 응용프로그램이 제작되고 그것이 일반사용자가 주로 사용하는 요건들을 대부분 충족한다면 하나둘 늘어갈 것이다. 그 것이 QT냐 GTK냐는 따질 이유도 없고 일단 따지기 귀찮다. 다만 GTK가 자료도 많아 보통 사람이 접근하기 좀더 쉽고 편하다(나만의 생각인가 ㅡ.ㅡ).

  • 정부에서도 리눅스 보급에 관심이 있고 작년에는 소프트웨어 진흥원에서 정부기관 비스무리한곳에 업무용 데스크탑 환경을 공개용 OS 또는 프로그램들로 전환하게 하는 사업도 있었다. 몇 개의 기관과 학교등이 이 사업으로 인해 리눅스로 바뀌었다. 앞으로는 점점 많아질것이라 기대해보고 또 그것을 촉진시킬 수 있을지도 모른다.

  • 본인 또한 윈도우를 많이 사용하는데 이유는 다양한 소프트웨어들이 존재하기 때문이다.
    이렇듯 충분한 종류와 수의 소프트웨어가 리눅스를 위해 준비되어져 있다면 선택받을 기회는 늘어날 것이다.

  • 장대한 목표도 좋겠고 잘 짜여진 계획도 필요하겠지만 적당한 방향만 생각하고 일단은 그냥 가는게 좋을듯 싶다. 가끔은 별생각없이 시작했던일들이 거대한 결과를 내는 것을 공개 소프트웨어와 관련된 일들에서 많이 봐오지 않았는가 일단은 교양삼아 GTK를 해보자 현재는 본인도 그러고 있다.

    자바와 .NET이 대세라 여겨지는 현 시점에서 시대에 뒤떨어지는 생각일지도 모르겠으나 어차피 손해볼 것도 없지 않은가? 환경과 언어가 바뀌었다고 큰일나는건 없다. 제반환경과 언어는 계속 변하겠지만 프로그램 개발이라는 것은 단지 그것만으로 하는 것이 아니지 않은가?

    오히려 그것들을 가벼운 것에 불과하다. 스스로에게 축적된 내공은 사라지는 법이 없다. 적을 칼로 제압하느냐 창으로 제압하느냐는 그때그때 상황과 환경에 따라 다른것이다. 도구는 중요한것이 아니다.

    우리가 진정 경계해야하는것은 치매와 기억상실이다! -_-; 대부분의 개발자들에겐 돌아갈 리조트나 엄청난 재산이 있을리 없다. 남는건 공백뿐 -0-

    (얼마전 모 오락프로에 나왔던 선천성 진지 결핍증이란 말에 왠지 뜨끔)


출처 : http://www.gnome.or.kr/web/default/58  (Sohalee의 GTK+ 강좌)

'QT' 카테고리의 다른 글

[QT/Embedded] Qt, Qt/Embedded, Qpe, Qtopia, OPIE 에 대한 개요  (0) 2010.04.11
Meta-Object System  (0) 2009.05.05
"Meda-Object System " : Qt-feature  (0) 2009.05.05
Intruduction  (0) 2009.05.04

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,
1. Qt
Trolltech사에서 만든 Cross Platform 툴킷 입니다.
Cross Platform에서 알 수 있듯이, 여러 운영체제에서 동일한 코드로 컴파일만 새로하면 동일한 결과를 얻기위해 사용되기 위해서 만들어 졌습니다.
현재 공식지원하는 것은, Windows, Linux, Mac, Solaris등이며 기타 다른 Platform에도(Irix등..) 포팅되어서 동작되는것으로 알고있으나 저도 한번도 본적은 없습니다. ^^

2. Qt의 라이센스 정책
Qt의 경우 Dual License를 가지고 있습니다. QPL이라는 형태인데, GPL과 Commercial두가지의 형태를 따릅니다.
최초 Qt가 Release되었을때 Commercial이라서 사용자들의 많은 원성을(?) 사게되어서 Trolltech에서 GPL+Commercial두가지 형태로 출시되었는데.
GPL의 경우, 일반적으로 알고있는 GPL이며, Commercial의 경우, 상업적 목적및 소스코드르 공개하지 않을경우에 Commercial을 이용해야 합니다.
Qt의 라이센스의 획득에 관련되어서는 여기서 논하게 되면 사이트의 성격상 특정 업체를 광고하게 되는 것이기 때문에 저한테 개인적으로 메일을(korone@gmail.com) 주시면 감사하겠습니다.
물론, 알만한 사람들은 다 아는 내용이지만... 이것에 관련되어서는 좀 조심스러워서 그런것이니 양해 부탁드립니다.

3. Qt를 사용하는곳
먼저 Qt의 사용에 대한 대표적인 곳이, KDE입니다. KDE는 X11 Desktop환경에서 Gnome과 KDE양대산맥(물론 Matchbox, Fluxbox. Afterstep 등의 사용자가 서운해 하실 수 있으나, 제 개인적 판단이니 너그럽게 생각해 주시기 바랍니다 ^^)중 하나 입니다.
KDE는 Qt + Qt위에 작동되는 KDE라이브러리를 이용해 만들어 졌으며
국내 Gnome환경에비해 KDE사용자가 많치 않지만, 외국에서는 훨씬 많은 이용률을 보입니다.
개발 프로그램도 굉장히 많구요.

그외 Trolltech Success Story Page에 보면 사용하고 있는 여러 곳을 확인할 수 있습니다.
(참조 URL : http://www.trolltech.com/success/index.html)

4. Qt/Embedded
Qt/Embedded는 기존 linux 기준으로 볼때 X11 서버 상에서 동작되는데, 통상 임베디드 기기에 X11을 올리지 않고 직접 FrameBuffer를 제어하는 방법을 통해서 속도가 빠르고 가볍게 동작됩니다.
Qt/Embedded는 몇몇 Class및 Function을 제외하고 기본적으로 Qt와 거의 동일한 구조를 가지기 때문에, 기존 Desktop용(KDE는 제외, 왜냐하면, KDE의 경우 KDE Library참조를 많이 합니다.)을 쉽게 Porting할 수 있습니다.

5. Qtopia
Qtopia는 Qt/Embedded를 이용해서 PDA 또는 Phone을 위해 작성된 application입니다.
Trolltech 홈페이지에서 자세한 내용및 관련 ScreenShot을 구경할 수 있습니다.

6. Qpe
Qpe는 예전에 오픈소스로 진행되던 Qtopia의 옛이름입니다.

7. OPIE
OPIE는 QtPalmTop이라는 이름을 가지는 Opensource PDA환경입니다.

더 자세하게 보강하겠습니다.



출처 : http://www.korone.net/bbs/board.php?bo_table=qt_lecture&wr_id=227&page=5

'QT' 카테고리의 다른 글

GTK와 GDK  (1) 2010.04.11
Meta-Object System  (0) 2009.05.05
"Meda-Object System " : Qt-feature  (0) 2009.05.05
Intruduction  (0) 2009.05.04

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

Meta-Object System

QT 2009. 5. 5. 04:20

Meta-Object System

Qt's Meta-Object System provides the signals and slots mechanism for inter-object communication, run-time type information, and the dynamic property system.

큐티의 베타 객체 시스템은  객체간 내부 커뮤니케이션, 런-타임타입 정보 그리고 동적 속성 시스템 위해 시그널과 슬롯 매커니즘을 제공한다.

The Meta-Object System is based on three things:

메타 객체 시스템은 세 가지 특징을 기반으로 하고있다.

  1. The QObject class provides a base class for objects that can take advantage of the meta-object system.
  2. The Q_OBJECT macro inside the private section of the class declaration is used to enable meta-object features, such as dynamic properties, signals, and slots.
  3. The Meta-Object Compiler (moc) supplies each QObject subclass with the necessary code to implement meta-object features.

  1. QObject 클래스는 메타 객체 시스템을 이용할수있는 객체들에게 기본 클래스를 제공한다.
  2. 클래스 선언부의 private영역내에 존재하는 Q_OBJECT 매크로는 메타 객체 속성(동적 속성, 시그널 과 슬롯) 들을 사용가능하게 하기위해서 사용되어진다.
  3. 메타 객체 컴파일러(MOC)는 각 QObject 하위 클래스에게 메타 객체 속성들을 구현하기위해 필요한 코드들을 생성한다.

The moc tool reads a C++ source file. If it finds one or more class declarations that contain the Q_글상자OBJECT macro, it produces another C++ source file which contains the meta-object code for each of those classes. This generated source file is either #include'd into the class's source file or, more usually, compiled and linked with the class's implementation.

In addition to providing the signals and slots mechanism for communication between objects (the main reason for introducing the system), the meta-object code provides the following additional features:

It is also possible to perform dynamic casts using qobject_cast() on QObject classes. The qobject_cast() function behaves similarly to the standard C++ dynamic_cast(), with the advantages that it doesn't require RTTI support and it works across dynamic library boundaries. It attempts to cast its argument to the pointer type specified in angle-brackets, returning a non-zero pointer if the object is of the correct type (determined at run-time), or 0 if the object's type is incompatible.

For example, let's assume MyWidget inherits from QWidget and is declared with the Q_OBJECT macro:

   QObject *obj = new MyWidget;

The obj variable, of type QObject *, actually refers to a MyWidget object, so we can cast it appropriately:

   
QWidget *widget = qobject_cast<QWidget *>(obj);

The cast from QObject to QWidget is successful, because the object is actually a MyWidget, which is a subclass of QWidget. Since we know that obj is a MyWidget, we can also cast it to MyWidget *:

    
MyWidget *myWidget = qobject_cast<MyWidget *>(obj);

The cast to MyWidget is successful because qobject_cast() makes no distinction between built-in Qt types and custom types.

   
QLabel *label = qobject_cast<QLabel *>(obj);
// label is 0

The cast to QLabel, on the other hand, fails. The pointer is then set to 0. This makes it possible to handle objects of different types differently at run-time, based on the type:

     if (QLabel *label = qobject_cast<QLabel *>(obj)) {
label->setText(tr("Ping"));
} else if (QPushButton *button = qobject_cast<QPushButton *>(obj)) {
button->setText(tr("Pong!"));
}

While it is possible to use QObject as a base class without the Q_OBJECT macro and without meta-object code, neither signals and slots nor the other features described here will be available if the Q_OBJECT macro is not used. From the meta-object system's point of view, a QObject subclass without meta code is equivalent to its closest ancestor with meta-object code. This means for example, that QMetaObject::className() will not return the actual name of your class, but the class name of this ancestor.

Therefore, we strongly recommend that all subclasses of QObject use the Q_OBJECT macro regardless of whether or not they actually use signals, slots, and properties.

See also QMetaObject, Qt's Property System, and Signals and Slots.


출처 : http://doc.trolltech.com/4.2/metaobjects.html

'QT' 카테고리의 다른 글

GTK와 GDK  (1) 2010.04.11
[QT/Embedded] Qt, Qt/Embedded, Qpe, Qtopia, OPIE 에 대한 개요  (0) 2010.04.11
"Meda-Object System " : Qt-feature  (0) 2009.05.05
Intruduction  (0) 2009.05.04

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

Qt's Meta-Object System

One of Qt's major achievements has been the extension of C++ with a mechanism for creating independent software components that can be bound together without any component knowing anything about the other components it is connected to.

Qt-의 주요 성과는 C++를 이용하여, 컴포넌트의 특별한 정보없이, 컴포넌트간의 경계를 접속할수 있게 해주므로써, 독립적인 소프트웨어 컴포너트를 만들수 있다.

 

The mechanism is called the meta-object system, and it provides two key services:

이러한 메커니즘은 Meta-Object 시스템이며, 두가지의 중요기능을 제공함:

signalsslots and introspection.

바로, 시그널 슬롯과  내성기능[?]이다.

 

The introspection functionality is necessary for implementing signals and slots, and allows application programmers to obtain "meta-information" about QObject subclasses at run-time, including the list of signals and slots supported by the object and its class name.

내성기능은 시그널과 슬롯의 구현에 필요한 것이며, 응용프로그래머에 런-타임에, QObject클래스의 상속을 제공하며, 시그널과 슬롯이 지원하는 객체와 클래스 이름을 제공한다.

 

The mechanism also supports properties (for Qt Designer) and text translation (for internationalization), and it lays the foundation for Qt Script for Applications (QSA).

이러한 메커니즘은 특성정보와 문서 번역을 지원하며, Qt 크르립트에 기제 되어있다.

 

Standard C++ doesn't provide support for the dynamic meta-information needed by Qt's meta-object system.

표준 C++는 Qt의 메타객체시스템이 필요로 하는 동적 메타정보를 제공하지 않는다.

 

Qt solves this problem by providing a separate tool, moc, that parses Q_OBJECT class definitions and makes the information available through C++ functions.

Qt는 C++이 선언하고 사용할 수있는 정보를 가능하게 해주는 스크립트

분리툴과 moc를 제공한다.

 

Since moc implements all its functionality using pure C++, Qt's meta-object system works with any C++ compiler.

Qt메타시스템은 moc의 구현은 어떠한 C++컴파일러가 사용할 수 있는 C++의 순수코드를 제공해준다.





[출처]http://blog.naver.com/starw42?Redirect=Log&logNo=80034262821

'QT' 카테고리의 다른 글

GTK와 GDK  (1) 2010.04.11
[QT/Embedded] Qt, Qt/Embedded, Qpe, Qtopia, OPIE 에 대한 개요  (0) 2010.04.11
Meta-Object System  (0) 2009.05.05
Intruduction  (0) 2009.05.04

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

Intruduction

QT 2009. 5. 4. 03:56
1 . Widget  : GUI 애플리케이션을 개발할 때 사용하는 그래픽 객체들을 위젯이라고 한다.
2. Toolkit : 여러 위젯들과 위젯에 대응하는 함수들의 묶음을 툴킷이라고 한다.
3. QT에서 고수준 이벤트에는 시그널 /슬롯 방식을, 저수준 이벤트에는 가상함수(Virtual Function)를 활용하여 각각 사용자의 이벤트를 처리한다.
4. Qt/Embedded는 프레임버퍼(Frame Buffer)를 직접 사용하기 때문에 aX 윈도우가 필요없다. 이로 인해 속도가 빠르고 X 윈도우가 사용하는 메모리(Memory)와 자원(Resource)을 절약할 수 있어서 메모리 용량이 적은 임베디드(Embedded) 기기에 적합하다.

5. 사용자 환경 설정
a. QTDIR : Qt가 설치되어 있는 디렉토리
b. PATH : moc 유틸리티와 같이 Qt에서 제공하는 유틸리티의 경로
c. MANPATH : Qt의 도움말 파일(Man Page)이 있는 경로
d. LD_LIBRARY_PATH : Qt의 라이브러리가 있는 경로


6. 클래스
a. Qt에서 특정 클래스를 사용하려면 각 클래스에 대한 정의가 들어 있는 헤더 파일을 인클루드시켜야 한다. Qt의 헤더 파일은 일반적으로 클래스명으로 기술된다(첫 2문자가 대문자로 시작한다.)
b. QApplication Class : 시스템에서 사용하는 기본 폰트나 커서와같은 GUI 자원, 프레임워크(Framework), 유티리티 자원들을 관리한다.
c. QWidget Class : X 윈도우에서는 QLabel 클래스 처럼 화면에 보이는 컴포넌트(Component)를 위젯이라고 하며, Qt에서는 QWidget 클래스를 상속해서 잇런 위젯들을 정의한다.

'QT' 카테고리의 다른 글

GTK와 GDK  (1) 2010.04.11
[QT/Embedded] Qt, Qt/Embedded, Qpe, Qtopia, OPIE 에 대한 개요  (0) 2010.04.11
Meta-Object System  (0) 2009.05.05
"Meda-Object System " : Qt-feature  (0) 2009.05.05

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,