원래 이번편은 폼디자인할때 자주쓰이는 위젯들에 대해서 설명할려고 했는데, 생각해보니 한둘도 아니고 자주쓰인다는 기준도 좀 모호하고, 그냥 함수설명하는 거라면 assistant찾아보면 다 나오는 것들이니, 별 영양가있는 내용이 나올것 같지않아서, 방향을 바꾸고, 이번편 부터는 직접 어플리케이션을 짜보도록 하겠습니다.

만들 어플리케이션은 텍스트 에디터입니다.
이미 assistant에서도 application이라는 이름의 예제로 텍스트 에디터를 제시할만큼, Qt로 어플리케이션을 만드는 방법을 설명하는데 있어서 그럴듯하면서도 이보다 간단한 예제는 드물듯 합니다.

텍스트 에디터라고 해도, 우리가 직접 인코딩 디코딩을 해주거나 할 필요는 없습니다.
Qt에는 QTextEdit라는, 텍스트 에디터로 바로 써도 손색없는 훌률한 위젯이 있습니다.
그러므로, 이 예제는 텍스트를 편집하는 방법 그 자체가 아니라, 어플리케이션이 일반적으로 지니고 있는 메뉴나 상태바, 툴바등을 어떻게 다룰지를 설명하는데 그 중점이 놓여질 것입니다.

또한, 일반적으로 문서를 다루는 어플리케이션에는 SDI와 MDI 두가지가 있다는 것 알고 계시죠?

모르는데?

간편을 위해서 일단 처음은 SDI로 시작하겠지만, 최종적으로는 MDI로 확장할 예정입니다.

1. QMainWindow
보통 어플리케이션을 만들때, 최상위 윈도우는 QMainWindow 클래스를 상속받아서 구현합니다.
QMainWindow 클래스에는, 일반적인 어플리케이션이 갖추고 있는 메뉴바, 툴바, 상태바들이 구현되어있고, 위젯들을 도킹시키기 위한 영역도 가지고 있기 때문에 매우 간단하게 어플리케이션을 만드는 것이 가능합니다.
QMainWindow를 상속받아서 MainWindow라는 클래스를 만들어 보겠습니다.

mainwindow.h

mainwindow.cpp

QMainWindow를 상속받아 MainWindow를 만들었습니다.
private 멤버로 Data *d를 선언하고 있는데, 이건 필자의 프로그래밍 스타일입니다.
이렇게 함으로써, 해더파일을 수정할 필요없이, 멤버들을 자유롭게 추가할수가 있기때문에, 이경우 처럼 해더파일의 의존성이 거의 0나 마찬가지인 클래스에서도 습관적으로 private영역에 데이터 전용 클래스를 선언하여 이용합니다. 이 데이터 클래스의 정의는 mainwindow.cpp에 있는데, 이로써 실제로 데이터 클래스의 구현을 숨기는 효과도 있습니다.
데이터 클래스에 지금은 아무것도 안들어있지만, 앞으로 추가할 멤버가 필요하면 여기에 추가해가게 될 것입니다.

이제 메인함수와 프로필파일을 만들어서 컴파일해보겠습니다.
main.cpp


texteditor.pro


처음으로 어플리케이션을 만들어 보는 것이므로 프로필 파일까지 처음부터 작성해보았습니다.
어플리케이션 이름은 texteditor로 하였습니다.
이상의 네 파일을 한 디렉토리안에 작성하고, 컴파일(qmake && make)해주면, 실행파일이 튀어나옵니다.
한번 실행해봅시다.
메인윈도우

썰렁하기 그지없는 모습

위 그림과 같이 아무것도 없는 창하나가 뜰 것입니다.
뭐야~ 메뉴바같은거 다 구현되있다며~ 라고 따지실 분이 계실지도 모르겠지만, '구현'되어있는 것과 객체를 만드는 것은 다릅니다.
OOP인 만큼, 메뉴바도 상태바도 다 객체이고, 이것들은 생성해주어야 합니다.
이것들을 생성하는 것은 곧 보게될 것입니다.

이제 하나씩 만들어 갑시다.
일단은 텍스트를 편집할 부분이 필요합니다.
처음에 말했듯이, QTextEdit라는 클래스를 이용합니다.
mainwindow.cpp

QTextEdit 클래스를 이용하기 위해 해더파일을 추가하고, 데이터 클래스에 QTextEdit *edit를 추가하였습니다.
생성자로 가보면 edit에 객체를 생성하여 할당하고 있습니다.
QTextEdit의 생성자로 this를 넘기는 것은 설명하지 않아도 될것이라고 믿습니다(왜인지 모르시는 분은 6편을 복습하시기 바랍니다).

그다음 줄을 보면 setCentralWidget(d->edit); 라는 함수를 호출하고 있습니다.

QMainWIndow는, 위젯을 몇개의 영역으로 나누고 있습니다.

사용자 삽입 이미지

QMainWindow의 영역(Qt assistant QMainWindow항목으로부터 인용)

위 그림과 같이, 제일 상단에 메뉴바를, 제일 하단에 상태바를, 그 안쪽으로 툴바 영역을, 또 그안쪽으로는 도킹 영역을, 그리고 가장 안쪽에 'Central Widget'을 위한 영역이 있습니다.

이 Central Widget이 바로 어플리케이션에서 주된 기능(이경우는 텍스트 편집)을 담당하는 위젯이 될 것입니다.

setCentralWidget함수는 이름 그대로 central widget을 지정하기 위한 함수입니다.
이제 central widget에는 QTextEdit의 인스턴스인 d->edit가 들어가있습니다.
수정된 파일을 다시 컴파일하고 실행해보면 다음과 같은 창이 뜹니다.
사용자 삽입 이미지
우리는 central widget이외에 아무것도 생성하지 않았기 때문에, d->edit외에 아무것도 안나옵니다.
이 창에서 이것저것 글씨를 적을수 있습니다. 그뿐만 아니라 복사하기와 붙여넣기도 가능하고, 편집한 내용을 되돌리거나 다시 실행하기(undo/redo)도 가능합니다.
이것들은 모두 이미 QTextEdit에서 구현되어있는 기능들입니다.
따라서 우리는 사실상 텍스트자체를 편집하기 위해서 딱히 해줘야할 것들은 없고, 어플리케이션을 구현하는 만드는 방법에 집중할 수 있을 것입니다.

내용이 길어지므로 이번편의 내용은 이쯤에서 마치겠습니다.
마지막으로 이번편에 이용한 예제 소스파일을 첨부합니다.
texteditor.tar.gz

예제코드

다음편에는 메뉴바작성을 해보겠습니다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/08/25 05:09 2008/08/25 05:09

Trackback URL : http://xylosper.net/trackback/121

Leave a comment
[로그인][오픈아이디란?]

« Previous : 1 : ... 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : 12 : ... 112 : Next »

Recent Posts

  1. MBTI 유형테스트
  2. static 변수를 이용한 싱글톤 구현시...
  3. CMPlayer 0.2.1 공개
  4. Qt 팁 - 2. Qt로 만든 프로그램을 배...
  5. Qt 팁 - 1. Qt로 정적(static) 빌드하기

Recent Comments

  1. 부업 돈벌기 이 부업을 하시면 반드... 이성순 09:48
  2. 부업 돈벌기 이 부업을 하시면 반드... 이성순 09:48
  3. 부업 돈벌기 이 부업을 하시면 반드... 이성순 11/20
  4. 일부러 찾아오셔서 댓글까지 남겨주... xylosper 10/11
  5. 트랙백 보고 왔어요. ^^ 저도 트랙백... A2 10/11

Recent Trackbacks

  1. Fioricet online. Buy fioricet online that ships to... 12:45
  2. 위젯 개발의 화두 'width' 위젯박사 쏭군의 열정이야기 11/20
  3. Bestiality porn zoo sex private ph... Horse porn beast porn zoo. 11/15
  4. Ultram er tablets. Side effects of ultram. 11/14
  5. 재미로 해보는 MBTI 검사 A2공간 - 도움되는 글을 쓰자 10/11

Calendar

«   2008/11   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

Bookmarks

  1. Project CMPlayer
  2. seevaa의 잡다구리한 이야기

Site Stats

TOTAL 100150 HIT
TODAY 140 HIT
YESTERDAY 231 HIT
Statistics Graph