Development/Tutorials/KDE4 Porting Guide (ko)

From KDE TechBase

소개

이 문서의 목적은 Qt3/KDE3 기반의 프로그램을 Qt4/KDE4로 포팅하는 것을 도와 주는 것입니다. KDE 3 기반의 프로그램을 포팅하는 것은 쉽습니다. 이 과정을 도와 줄 수 있는 스크립트가 많이 있습니다.

규칙

이 문서에서 사용하는 약어는 다음과 같습니다.

  • program은 실행할 프로그램을 나타냅니다.
  • path은 경로를 나타냅니다.
  • file는 파일을 나타냅니다.
  • $SVN은 KDE 서브버전 체크아웃 폴더의 경로입니다.


CMake

KDE 3.x와 달리, KDE 4 프로그램은 CMake를 사용해서 빌드합니다. 지금까지 사용하던 autotools 시스템을 CMake로 쉽게 포팅하려면, kdesdk 모듈의 cmake/scripts 디렉터리에 있는 am2cmake 스크립트를 사용하십시오. 이 스크립트는 오래 된 빌드 시스템 파일을 수정할 것이며, CMakeLists.txt 파일들을 만들 것입니다.

예를 들어, 소스 코드가 /path/to/src에 있다면 다음과 같이 실행하십시오.

% cd /path/to/src
% $SVN/trunk/KDE/kdesdk/cmake/scripts/am2cmake --kde4

--kde4 플래그가 필요한 지 검사하려면 am2cmake --help를 실행하십시오.

CMakeList.txt 파일에 생길 수 있는 잠재된 문재를 검사하기 위한 도구가 있습니다. cmakelint.pl이라고 불리는 이 도구는 $SVN/trunk/kde/kdesdk/scripts에 있습니다. 다음과 같이 사용하십시오:

% cd /path/to/src
% $SVN/trunk/KDE/kdesdk/scripts/cmakelint.pl CMakeLists.txt

전체 소스 디렉터리에 대해서 실행하시려면 다음과 같이 시작하십시오:

% cd /path/to/src
% find . -name CMakeLists.txt | \
  xargs $SVN/trunk/KDE/kdesdk/scripts/cmakelint.pl

Qt4 API

Qt 3과 4 사이의 API 변경 사항은 Trolltech의 문서 "Qt 3에서 Qt 4로 포팅하기"를 참고하십시오. 이 문서는 Qt 4에서 생긴 기능 변화에 대한 정보를 제공합니다. 이 문서를 참고하셔서 Qt 3을 사용하는 코드를 Qt 4로 쉽게 변환할 수 있습니다. Trolltech에서는 Qt 3 코드를 Qt 4로 쉽게 포팅할 수 있는 qt3to4 도구를 제공합니다. 다음과 같이 실행시키십시오:

% $SVN/trunk/qt-copy/bin/qt3to4 [options] <Infile>, [Infile], ...

Infile은 원본 코드나 프로젝트 파일입니다. .pro 또는 .pri로 끝나는 프로젝트 파일을 지정했으면, 프로젝트 안에 있는 모든 파일을 포팅할 것입니다. 더 많은 정보를 보려면 qt3to4에 --help 옵션을 지정하거나, Trolltech의 "qt3to4: Qt 3을 Qt 4로 포팅하는 도구" 페이지를 참고하십시오.

kdesdk 모듈에는 Qt 4에서 더 이상 사용되지 않는 Qt 3 관련 부분을 제거해 주는 remove-qt3-support.pl 프로그램이 있습니다. 이 프로그램은 소스 디렉터리에서 아무 옵션도 없이 실행하시면 됩니다.

% $SVN/trunk/KDE/kdesdk/scripts/qt4/remove-qt3-support.pl

KDE4 API

대부분 포팅 과정은 클래스 이름이나 헤더 파일들의 이름을 바꾸는 것입니다. 직접 이 파일들을 변환하는 것은 힘든 일일 수 있기 때문에, kdesdk 모듈의 scripts/qt4 디렉터리에 있는 adapt-to-kde4-api.pl이라고 하는 편리한 스크립트가 있습니다. 모든 파일을 검사하고 코드를 패치할 수 있는 diff 파일을 만들 것입니다.

간단한 코드 변경을 한 다음에는, 코드를 읽어 보면서 포팅할 부분을 찾으십시오. 예를 들어 새로운 KAction API가 있습니다. 모든 API 변경 사항은 kdelibs 모듈에 있는 KDE4PORTING.html에서 찾을 수 있습니다.

Qt 디자이너 UI 파일

Qt 3을 사용해서 만든 Qt 디자이너 .ui 파일은 새로운 Qt 4 형식으로 변환해야 합니다. Qt 4 설치본에 있는 uic3을 사용하면 쉽게 변환할 수 있습니다.

% $SVN/trunk/qt-copy/bin/uic3 -convert file.ui > foo.ui
% mv foo.ui file.ui

그래픽 도구를 선호한다면, Qt 4 디자이너 프로그램을 사용하십시오.

% $SVN/trunk/qt-copy/bin/designer file.ui
(you can save file.ui over top itself, or save to a new file)
Warning
변환하는 중 사용자 정의 슬롯, 열 머릿글 등이 삭제될 수도 있습니다. 나중에 수작업으로 추가해야 할 수도 있습니다.


UI 파일을 청소하고 완전성 검사를 하는 kdesdk 모듈에 있는 fixuifiles 프로그램을 실행해야 할 필요도 있습니다.

% $SVN/trunk/KDE/kdesdk/scripts/fixuifiles

D-Bus

프로세스 간 호출(IPC)을 위해서 KDE 3에서 DCOP을 사용하였다면, KDE 4에서는 D-Bus를 사용합니다. DCOP에서 D-Bus로 포팅하는 것은 D-Bus로 포팅하기 문서에서 아주 상세하게 다루고 있습니다. 좀 더 상세한 정보는 D-Bus에 있습니다.

아이콘

KDE 4에서는 freedesktop.org 아이콘 이름 스펙에 따라서 아이콘 이름을 붙입니다. KDE 4에 제공되는 Oxygen 아이콘 테마와 kdelibs의 구성 요소 둘 다 이 규칙을 따른다는 것입니다. KDE 3에서 사용되었던 아이콘 이름을 KDE 4의 아이콘 이름으로 교체하는 방법은 프로젝트 루트 디렉터리에서 adapt-to-icon-spec.py를 실행하고 화면에 나오는 설명대로 진행하십시오.

The script automatically converts confirmable positives (e.g. uses of KIcon or KIconLoader), skips confirmable negatives and prompts for what to do with possible positives. It shows the latter with additonal context if desired and makes it a simple matter of pressing 'y' or 'n' for the possible hits to complete the porting.

국제화(I18N)

".pot" 파일을 생성하기 위해, 당신의 프로젝트 Makefile.am 안에 'messages' 규정으로부터 Messages.sh라고 불리는 쉘스크립트로 커맨드를 복사한다. 당신은 아직짜지 존재하는 변수($PREPARETIPS, $XGETTEXT, $podir, etc.)와 같다고 가정할 것이다. 그러나 Makefile과 쉘 스크립트 문법 사이에는 제각기 다른 점을 유지하고 있다.

To create your ".pot" file, copy the commands from the 'messages' rule in your projects Makefile.am to a shell script called Messages.sh. You may assume the same variables ($PREPARETIPS, $XGETTEXT, $podir, etc.) still exist, but keep in mind the differences between Makefile and shell script syntax.

또한 만약 당신이 -k 파라미터를 $XGETTEXT에서 사용한다면, 명백히 당신이 사용하는 모든 변수들을 목록화할 필요가 있다는 것에 주의하라.

Also be careful that if you use the -k parameter with $XGETTEXT, you will need to explicitely list all variants that you use.

예를 들어 'messages' 생성 규칙은 다음과 같다:

For example, the 'messages' creation rule:
messages: rc.cpp
        rm -f tips.cpp
        $(PREPARETIPS) > tips.cpp
        $(XGETTEXT) -ktranslate *.cpp *.h -o $(podir)/kmail.pot
        rm -f tips.cpp

다음에 나오는 Messages.sh 스크립트가 적합하다.: becomes the following Messages.sh script:

#! /usr/bin/env bash
$PREPARETIPS > tips.cpp
$XGETTEXT -ktranslate:1,1t -ktranslate:1c,2,2t *.cpp *.h -o $podir/kmail.pot
rm -f tips.cpp

하지 말아야 할 것

  • 구식 스타일 소켓 클래스를 사용하지 마십시오.
  • QPtrList를 사용하지 마십시오. 특히 setAutoDelete()를 사용하지 마십시오.
  • 래스터 연산을 사용하지 마십시오.
  • QHBox, QVBox, QGrid를 사용하는 대신 레이아웃을 사용하십시오.
  • 프레임, 그룹 상자, 레이블, 라인 에디터 등으로 다른 위젯의 흉내를 내지 마십시오. 대신 올바른 위젯을 사용하십시오. 예를 들어, 라인 에디트 위젯의 경계를 움푹 들어가게 하기 위해서 위해서 레이블을 설정하는 대신 읽기 전용 KLineEdit 클래스를 사용하십시오. 복사할 수 있는 위젯에 대해서 경계선이 없는 KLineEdit를 사용하는 대신 KActiveLavel 클래스를 사용하십시오.
  • 테두리 없는 그룹 상자로 위젯을 묶지 마십시오! 그 대신 레이아웃을 사용하십시오.

지원

문서

기타 도움

  • irc.freenode.net의 #kde4-devel 채널