Qt에 대하여 - 10. 실전! - 텍스트 에디터(1)
2008/08/25 05:09



만들 어플리케이션은 텍스트 에디터입니다.
이미 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에는 QTextEdit의 인스턴스인 d->edit가 들어가있습니다.
수정된 파일을 다시 컴파일하고 실행해보면 다음과 같은 창이 뜹니다.

이 창에서 이것저것 글씨를 적을수 있습니다. 그뿐만 아니라 복사하기와 붙여넣기도 가능하고, 편집한 내용을 되돌리거나 다시 실행하기(undo/redo)도 가능합니다.
이것들은 모두 이미 QTextEdit에서 구현되어있는 기능들입니다.
따라서 우리는 사실상 텍스트자체를 편집하기 위해서 딱히 해줘야할 것들은 없고, 어플리케이션을 구현하는 만드는 방법에 집중할 수 있을 것입니다.
내용이 길어지므로 이번편의 내용은 이쯤에서 마치겠습니다.
마지막으로 이번편에 이용한 예제 소스파일을 첨부합니다.
다음편에는 메뉴바작성을 해보겠습니다.
Trackback URL : http://xylosper.net/trackback/121
texteditor.tar.gz
