Development/Tutorials/KDE4 Porting Guide (ko): Difference between revisions

From KDE TechBase
(New page: {{Template:I18n/Language Navigation Bar|Development/Tutorials/KDE4_Porting_Guide}} ==소개== 이 튜트리얼은 Qt3/KDE3 기반의 어플리케이션을 Qt4/KDE4로 포팅하도록 돕...)
 
No edit summary
 
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Template:I18n/Language Navigation Bar|Development/Tutorials/KDE4_Porting_Guide}}


==소개==
==소개==
튜트리얼은 Qt3/KDE3 기반의 어플리케이션을 Qt4/KDE4로 포팅하도록 돕는 것을 목적으로 하고 있다.
문서의 목적은 Qt3/KDE3 기반의 프로그램을 Qt4/KDE4로 포팅하는 것을 도와 주는 것입니다. KDE 3 기반의 프로그램을 포팅하는 것은 쉽습니다. 이 과정을 도와 줄 수 있는 스크립트가 많이 있습니다.
KD3 기반의 어플리케이션을 포팅하는 것은 어려운 과정이 필요 없다. 이미 도와줄 수 있는 많은 스크립트와 문서의 소스들이 존재한다.
A tutorial intended to help developers port their Qt3/KDE3 based applications to Qt4/KDE4.  Porting a KDE3 based application needn't be a difficult process. Already, there are many scripts and sources of documentation which can help.


==규정==
==규칙==
튜트리얼에서 설명들을 위해, 다음과 같은 약어를 사용할 것이다.
문서에서 사용하는 약어는 다음과 같습니다.
:''For the instructions in this tutorial we use the following shorthand:''


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


* {{program|program}}은 실행할 프로그램을 나타낸다.
* {{path|path}}은 경로를 나타낸다.
* {{path|file}}는 파일을 나타낸다.
* $SVN은 당신의 KDE subversion이 checkout한 장소의 전체경로이다.
:'' {{program|program}} refers to an executable program''
:'' {{path|path}} refers to a path''
:'' {{path|file}} refers to a file''
:'' $SVN is the fullpath to the location of your KDE subversion checkout''


==CMake==
==CMake==
KDE3과 달리, KDE4 어플리케이션은 [[Development/Tutorials/CMake (ko)| CMake]]의 도움으로 빌드할 수 있다. 당신의 autotolls 시스템을 CMake로 쉽게 포팅하는 방법은 [http://websvn.kde.org/trunk/KDE/kdesdk/ kdesdk] 모듈의 {{path|cmake/scripts}} 디렉토리 안에서 찾을 수 있는 {{program|am2cmake}} 스크립트를 사용하는 것이다. 이것은 당신의 오래된 빌드 시스템 파일와 함께 {{path|CMakeLists.txt}} 파일 시리즈를 생성할 것이다.
KDE 3.x와 달리, KDE 4 프로그램은 [[Development/Tutorials/CMake (ko)|CMake]]를 사용해서 빌드합니다. 지금까지 사용하던 autotools 시스템을 CMake로 쉽게 포팅하려면, [http://websvn.kde.org/trunk/KDE/kdesdk/ kdesdk] 모듈의 {{path|cmake/scripts}} 디렉터리에 있는 {{program|am2cmake}} 스크립트를 사용하십시오. 이 스크립트는 오래 된 빌드 시스템 파일을 수정할 것이며, {{path|CMakeLists.txt}} 파일들을 만들 것입니다.
:''Unlike KDE3, KDE4 applications will be built with the help of [[Development/Tutorials/CMake | CMake]]. The easiest way to port your autotools system to CMake is with the help of the {{program|am2cmake}} script which can be found in the {{path|cmake/scripts}} directory of the [http://websvn.kde.org/trunk/KDE/kdesdk/ kdesdk] module. This will create a series of {{path|CMakeLists.txt}} files alongside your old buildsystem files.''


예를들어, 만약 당신의 소스코드가 {{path|/path/to/src}}에 위치같다면 다음과 같다.
예를 들어, 소스 코드가 {{path|/path/to/src}}에 있다면 다음과 같이 실행하십시오.
For example, if your source code is located in {{path|/path/to/src}} then:
<syntaxhighlight lang="bash">
<code bash>
% cd /path/to/src
% cd /path/to/src
% $SVN/trunk/KDE/kdesdk/cmake/scripts/am2cmake --kde4
% $SVN/trunk/KDE/kdesdk/cmake/scripts/am2cmake --kde4
</code>
</syntaxhighlight>


<tt>--kde4</tt> 플래그가 필요할 필요가 있는지 검사하기 위해, <tt> am2cmake --help</tt>를 실행하라.
<tt>--kde4</tt> 플래그가 필요한 지 검사하려면 <tt> am2cmake --help</tt>를 실행하십시오.
:''Run <tt> am2cmake --help</tt> to check whether you need the <tt>--kde4</tt> flag.''


잠재된 문재들을 위하여, {{path|CMakeList.txt}}를 당신의 결과로 보여주는 또 하나의 툴이 있다. 이 툴은 {{path|$SVN/trunk/kde/kdesdk/scripts}} 안에 위치한 {{program|cmakelint.pl}}이다. 이것은 다음과 같이 사용한다.:
{{path|CMakeList.txt}} 파일에 생길 수 있는 잠재된 문재를 검사하기 위한 도구가 있습니다. {{program|cmakelint.pl}}이라고 불리는 이 도구는 {{path|$SVN/trunk/kde/kdesdk/scripts}}에 있습니다. 다음과 같이 사용하십시오:
:''There is also a tool that looks in your resulting {{path|CMakeList.txt}} files for potential problems.  This tool called {{program|cmakelint.pl}} is located in {{path|$SVN/trunk/kde/kdesdk/scripts}}. Use it like so:''
<syntaxhighlight lang="bash">
<code bash>
% cd /path/to/src
% cd /path/to/src
% $SVN/trunk/KDE/kdesdk/scripts/cmakelint.pl CMakeLists.txt
% $SVN/trunk/KDE/kdesdk/scripts/cmakelint.pl CMakeLists.txt
</code>
</syntaxhighlight>
또는 당신의 전체 소스 디렉토리에 걸쳐서 실행한다.
전체 소스 디렉터리에 대해서 실행하시려면 다음과 같이 시작하십시오:
:''Or, to run it over your entire source directory:''
<syntaxhighlight lang="bash">
<code bash>
% cd /path/to/src
% cd /path/to/src
% find . -name CMakeLists.txt | \
% find . -name CMakeLists.txt | \
   xargs $SVN/trunk/KDE/kdesdk/scripts/cmakelint.pl
   xargs $SVN/trunk/KDE/kdesdk/scripts/cmakelint.pl
</code>
</syntaxhighlight>


==Qt4 API==
==Qt4 API==
Qt4로 변경하는 Qt3에서 개요는 트롤테크의 [http://www.trolltech.com/products/qt/whatsnew/porting "Qt 3에서 Qt 4로 이동하기"]에서 제공되어진다. 이 문서는 Qt4의 주요 기능 변화에 대한 훌륭한 개요를 제공하며, 매우 추천할만 하다.
Qt 3과 4 사이의 API 변경 사항은 Trolltech의 문서 [http://www.trolltech.com/products/qt/whatsnew/porting "Qt 3에서 Qt 4로 포팅하기"]를 참고하십시오. 이 문서는 Qt 4에서 생긴 기능 변화에 대한 정보를 제공합니다. 이 문서를 참고하셔서 Qt 3을 사용하는 코드를 Qt 4로 쉽게 변환할 수 있습니다. Trolltech에서는 Qt 3 코드를 Qt 4로 쉽게 포팅할 수 있는 {{program|qt3to4}} 도구를 제공합니다. 다음과 같이 실행시키십시오:
:''An overview of the Qt3 to Qt4 transition is provided in Trolltech's
[http://www.trolltech.com/products/qt/whatsnew/porting "Moving from Qt 3 to Qt 4"] paper.  This document provides an excellent overview into the major functionality changes with Qt4 and is highly recommended.''
 
[http://doc.trolltech.com/latest/porting4.html "Qt 4로 포팅하기"] 페이지는 클래스와 함수의 변화 리스트에 따라 놀라울 정도로 포팅 과정 설명을 제공한다.  
The follow-on [http://doc.trolltech.com/latest/porting4.html "Porting to Qt 4"] page gives an amazingly detailed description of the porting process, along with a list of the changes in the classes and functions.


이 문서들은 당신의 Qt 코드 부분을 Qt3에서 Qt4로 호환되는 함수를 사용하여 포팅할 수 있으며, 트롤테크이 제공하는 {{program|qt3to4}}도구에 대해 설명한다. {{program|qt3to4}}를 다음과 같이 실행하라.
<syntaxhighlight lang="bash">
:''These documents describe a tool provided by Trolltech called {{program|qt3to4}} that can help port the Qt parts of your code from Qt3 to Qt4, using compatibility functions.  Run {{program|qt3to4}} as follows:''
<code bash>
% $SVN/trunk/qt-copy/bin/qt3to4 [options] <Infile>, [Infile], ...
% $SVN/trunk/qt-copy/bin/qt3to4 [options] <Infile>, [Infile], ...
</code>
</syntaxhighlight>
Infile은 소스파일이나 프로젝트 파일이 될 수 있다. 만약 (.pro 혹은 .pri로 끝나는)프로젝트 파일을 설정했다면, 프로젝트 안에 설정된 모든 파일이 포팅될 것이다.
Infile은 원본 코드나 프로젝트 파일입니다. .pro 또는 .pri로 끝나는 프로젝트 파일을 지정했으면, 프로젝트 안에 있는 모든 파일을 포팅할 것입니다. 더 많은 정보를 보려면 {{program|qt3to4}}--help 옵션을 지정하거나, Trolltech의  [http://doc.trolltech.com/latest/qt3to4.html "qt3to4: Qt 3을 Qt 4로 포팅하는 도구"] 페이지를 참고하십시오.
:''Infile can be a source file or a project file. If you specify a project file, ending with '.pro' or '.pri', {{program|qt3to4}} will port all files specified in that project.''
 
더 많은 정보를 위해서는 {{program|qt3to4}}--help 옵션으로 실행하라. 좀 더 많은 정보를 위해서는,[http://doc.trolltech.com/latest/qt3to4.html "qt3to4-Qt 3를 Qt4로 포팅하는 도구"] 페이지를 방문하라.
:''For more information, run {{program|qt3to4}} with the "--help" option or visit
the [http://doc.trolltech.com/latest/qt3to4.html "qt3to4-The Qt 3 to 4 Porting Tool"] page.''


추가적으로  당신을 위해 반대되는 Qt3의 많은 것들을 검색하거나 대신할 {{module|kdesdk}} 모듈 안의 {{program|remove-qt3-support.pl}}라고 불리는 프로그램이 존재한다. 이 프로그램은 소스 디렉토리 안에서 어떤 옵션 없이 간단히 실행된다.
{{module|kdesdk}} 모듈에는 Qt 4에서 더 이상 사용되지 않는 Qt 3 관련 부분을 제거해 주는 {{program|remove-qt3-support.pl}} 프로그램이 있습니다. 이 프로그램은 소스 디렉터리에서 아무 옵션도 없이 실행하시면 됩니다.
:''Additionally, there is a program called {{program|remove-qt3-support.pl}} in the {{module|kdesdk}} module that will search and replace lots of deprecated Qt3 stuff for you. Simply run this program without any options in the source directory.''
<syntaxhighlight lang="bash">
<code bash>
% $SVN/trunk/KDE/kdesdk/scripts/qt4/remove-qt3-support.pl
% $SVN/trunk/KDE/kdesdk/scripts/qt4/remove-qt3-support.pl
</code>
</syntaxhighlight>


==KDE4 API==
==KDE4 API==
포팅시도의 대부분은 간단히 다시 이름 붙여진 클래스 이름과 헤더파일을 구성한다. 수동으로 모든 것을 변화시키는 것은 약간 지루할 것이므로, {{module|kdesdk}}{{path|scripts/qt4}}안에 다루기 쉬운 {{program|adapt-to-kde4-api.pl}}라는 스크립트가 존재한다. 이것은 당신의 파일을 모두 검사할 것이고, 당신의 코드를 패치하는 데 사용될 수 있는 {{program|diff}} 출력을 만들어 낼 것이다.
대부분 포팅 과정은 클래스 이름이나 헤더 파일들의 이름을 바꾸는 것입니다. 직접 파일들을 변환하는 것은 힘든 일일 수 있기 때문에, {{module|kdesdk}} 모듈의 {{path|scripts/qt4}} 디렉터리에 있는 {{program|adapt-to-kde4-api.pl}}이라고 하는 편리한 스크립트가 있습니다. 모든 파일을 검사하고 코드를 패치할 수 있는 {{program|diff}} 파일을 만들 것입니다.
:''Much of the porting effort consists of simply renaming class names and header files. Since it would be rather tedious to change all these by hand, there is a handy script in the {{path|scripts/qt4}} directory of {{module|kdesdk}} called {{program|adapt-to-kde4-api.pl}}. This will scan all your files and create a {{program|diff}} output which can then be used to patch your code.''


간단한 코드 변경은 수행되었다.. 당신은 아직도 당신의 코드를 포팅하도록 해야할 것이다.(예를 들어 새로운 <tt>KAction</tt> API와 같은 것들..) 모든 API 변화에 대한 문서는 {{module|kdelibs}}에[http://websvn.kde.org/*checkout*/trunk/KDE/kdelibs/KDE4PORTING.html KDE4PORTING.html]에 보관되어 있다.
간단한 코드 변경을 한 다음에는, 코드를 읽어 보면서 포팅할 부분을 찾으십시오. 예를 들어 새로운 <tt>KAction</tt> API가 있습니다. 모든 API 변경 사항은  {{module|kdelibs}} 모듈에 있는 [http://websvn.kde.org/*checkout*/trunk/KDE/kdelibs/KDE4PORTING.html KDE4PORTING.html]에서 찾을 수 있습니다.
:''Once that simple code substitution has been done, you will still have to go through your code to port to, for example, the new <tt>KAction</tt> API. Documentation about all API changes is kept in the [http://websvn.kde.org/*checkout*/trunk/KDE/kdelibs/KDE4PORTING.html KDE4PORTING.html] file in the {{module|kdelibs}} module.''


==Qt 디자이너 UI 파일==
==Qt 디자이너 UI 파일==
Qt3를 사용하여 생성된 Qt 디자이너 ".ui"파일은 새로운 Qt4 포맷으로 변환되어야 한다. 이것은 당신의 Qt4 설치 버전에서 사용 가능한 {{program|uic3}} 프로그램을 사용하여 수행될 있다.
Qt 3을 사용해서 만든 Qt 디자이너 .ui 파일은 새로운 Qt 4 형식으로 변환해야 합니다. Qt 4 설치본에 있는 {{program|uic3}}을 사용하면 쉽게 변환할 있습니다.
:''Qt designer ".ui" files created using Qt3 must be converted to the new Qt4 format.  This can be done using the {{program|uic3}} program available from your Qt4 installation.''


<code bash>
<syntaxhighlight lang="bash">
% $SVN/trunk/qt-copy/bin/uic3 -convert file.ui > foo.ui
% $SVN/trunk/qt-copy/bin/uic3 -convert file.ui > foo.ui
% mv foo.ui file.ui
% mv foo.ui file.ui
</code>
</syntaxhighlight>


또는 그래픽 도구를 원한다면, Qt4의 디자이너 프로그램을 사용할 수 있다.
그래픽 도구를 선호한다면, Qt 4 디자이너 프로그램을 사용하십시오.
:''Or, if you prefer a graphical tool, you can use Qt4's designer program''


<code bash>
<syntaxhighlight lang="bash">
% $SVN/trunk/qt-copy/bin/designer file.ui
% $SVN/trunk/qt-copy/bin/designer file.ui
(you can save file.ui over top itself, or save to a new file)
(you can save file.ui over top itself, or save to a new file)
</code>
</syntaxhighlight>


{{Warning|변환 과정 중에 어떠한 커스텀 슬롯들, 테이블, 그 밖의 것을 잃어버리는 것에 대해 주의해라. 당신은 수동으로 몇몇 재료들을 넣어야 할 수도 있다.}}
{{Warning|변환하는 중 사용자 정의 슬롯, 열 머릿글 등이 삭제될 수도 있습니다. 나중에 수작업으로 추가해야 할 수도 있습니다.}}
:''Warning|Beware, the conversion process loses any custom slots, table columns, etc.  So, you may need to put some stuff back by hand.''


당신은 {{module|kdesdk}} 모듈에서 {{program|fixuifiles}}프로그램을 실해야할 한다. 이것은 청소(cleanup)완전성 검사(sanity checks)를 수행한다.
UI 파일을 청소하고 완전성 검사를 하는 {{module|kdesdk}} 모듈에 있는 {{program|fixuifiles}} 프로그램을 실행해야 할 필요도 있습니다.
:''You should also run the {{program|fixuifiles}} program from the {{module|kdesdk}} module, it performs cleanups and sanity checks:''
<syntaxhighlight lang="bash">
<code bash>
% $SVN/trunk/KDE/kdesdk/scripts/fixuifiles
% $SVN/trunk/KDE/kdesdk/scripts/fixuifiles
</code>
</syntaxhighlight>


==D-Bus==
==D-Bus==
DCOP in KDE3 대신, KDE4에서는 이제 IPC를 위해 D-Bus를사용한다. DCOP에서 D-Bus로 포팅하는 것은 [[Development/Tutorials/Porting_to_D-Bus (ko)|D-Bus로 포팅하기 튜트리얼]]에서 아주 세부적으로 다루어지는 큰 주제이다.
프로세스 간 호출(IPC)을 위해서 KDE 3에서 DCOP을 사용하였다면, KDE 4에서는 D-Bus를 사용합니다. DCOP에서 D-Bus로 포팅하는 것은 [[Development/Tutorials/Porting_to_D-Bus (ko)|D-Bus로 포팅하기]] 문서에서 아주 상세하게 다루고 있습니다. 좀 더 상세한 정보는 [[Development/Tutorials (ko)#D-Bus|D-Bus]]에 있습니다.
:''Instead of DCOP in KDE3, KDE4 now uses D-Bus for its interprocess communication. Porting from DCOP to D-Bus is a large topic that is covered in great detail in the [[Development/Tutorials/Porting_to_D-Bus (ko)|Porting to D-Bus tutorial]].''
 
좀더 세부적인 정보는, [[Development/Tutorials (ko)#D-Bus|D-Bus 튜트리얼]]를 살펴 보라.
:''For more information, please see all our [[Development/Tutorials#D-Bus|D-Bus tutorials]].''


==아이콘==
==아이콘==
KDE는 아이콘 이름을 위해 [http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html freedesktop.org icon naming specification]를 기초로 사용한다. 이것은 KDE4(Oxygen)에서 사용되는 아이콘과 아이콘을 사용하는 kdelibs 컴포넌트 둘 다 이 명세에 따른다는 것을 의미한다.
KDE 4에서는 [http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html freedesktop.org 아이콘 이름 스펙]에 따라서 아이콘 이름을 붙입니다. KDE 4에 제공되는 Oxygen 아이콘 테마와 kdelibs의 구성 요소 둘 다 이 규칙을 따른다는 것입니다. KDE 3에서 사용되었던 아이콘 이름을 KDE 4의 아이콘 이름으로 교체하는 방법은 프로젝트 루트 디렉터리에서  [http://websvn.kde.org/*checkout*/trunk/KDE/kdesdk/scripts/qt4/adapt-to-icon-spec.py adapt-to-icon-spec.py]를 실행하고 화면에 나오는 설명대로 진행하십시오.
:''KDE4 uses the [http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html freedesktop.org icon naming specification] as the basis for icon names. This means that both the icons that ship with KDE4 (Oxygen) as well as components in kdelibs that use icons follow this specification.''


당신의 어플리케이션을 KDE3에서 사용되는 아이콘 이름에서 KDE3가 사용하는 것으로 포팅하는 것은 루트 디렉토리에서 [http://websvn.kde.org/*checkout*/trunk/KDE/kdesdk/scripts/qt4/adapt-to-icon-spec.py 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.''


:''Porting your app from the icon names used in KDE3 to the ones used in KDE4 is as easy as running the [http://websvn.kde.org/*checkout*/trunk/KDE/kdesdk/scripts/qt4/adapt-to-icon-spec.py adapt-to-icon-spec.py] script from the root directory of your project and follow the instructions on screen. ''
==국제화(I18N)==
 
자동적으로 확실한 긍정을 변환하고(예를 들어,  KIcon 혹은 KIconLoader의 사용), 확실한 부정은 유지하며, 가능한 긍적이 무엇인지 알려준다. 이것을 원하거나 만들 것인지에 대한 추가적인 내용들을 나중에 보여주며, 포팅을 완료하기 위해 'y'나 'n'을 누르는 간단한 것으로 만든다.
:''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" 파일을 생성하기 위해, 당신의 프로젝트 {{path|Makefile.am}} 안에 'messages' 규정으로부터 {{path|Messages.sh}}라고 불리는 쉘스크립트로 커맨드를 복사한다. 당신은 아직짜지 존재하는 변수($PREPARETIPS, $XGETTEXT, $podir, etc.)와 같다고 가정할 것이다. 그러나 Makefile과 쉘 스크립트 문법 사이에는 제각기 다른 점을 유지하고 있다.
To create your ".pot" file, copy the commands from the 'messages' rule in your projects {{path|Makefile.am}} to a shell script called {{path|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.
:''To create your ".pot" file, copy the commands from the 'messages' rule in your projects {{path|Makefile.am}} to a shell script called {{path|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.''


Also be careful that if you use the -k parameter with $XGETTEXT, you will need to explicitely list all variants that you use.
또한 만약 당신이 -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.''


For example, the 'messages' creation rule:
예를 들어 'messages' 생성 규칙은 다음과 같다:
<code>
:''For example, the 'messages' creation rule:''
<syntaxhighlight lang="text">
messages: rc.cpp
messages: rc.cpp
         rm -f tips.cpp
         rm -f tips.cpp
Line 138: Line 99:
         $(XGETTEXT) -ktranslate *.cpp *.h -o $(podir)/kmail.pot
         $(XGETTEXT) -ktranslate *.cpp *.h -o $(podir)/kmail.pot
         rm -f tips.cpp
         rm -f tips.cpp
</code>
</syntaxhighlight>
 
다음에 나오는 {{path|Messages.sh}} 스크립트가 적합하다.:
becomes the following {{path|Messages.sh}} script:
becomes the following {{path|Messages.sh}} script:
<code bash>
<syntaxhighlight lang="bash">
#! /usr/bin/env bash
#! /usr/bin/env bash
$PREPARETIPS > tips.cpp
$PREPARETIPS > tips.cpp
$XGETTEXT -ktranslate:1,1t -ktranslate:1c,2,2t *.cpp *.h -o $podir/kmail.pot
$XGETTEXT -ktranslate:1,1t -ktranslate:1c,2,2t *.cpp *.h -o $podir/kmail.pot
rm -f tips.cpp
rm -f tips.cpp
</code>
</syntaxhighlight>


==해야될 것과 하지 말아야 할 것==  
==하지 말아야 할 것==
* Do NOT use the old-style socket classes.  
* 구식 스타일 소켓 클래스를 사용하지 마십시오.
* Do NOT use {{qt3|QPtrList}}, and in general, setAutoDelete()  
* {{qt3|QPtrList}}를 사용하지 마십시오. 특히 setAutoDelete()를 사용하지 마십시오.
* Do NOT make use of raster operations.  
* 래스터 연산을 사용하지 마십시오.
* Do NOT do code painting on widgets outside paint events.  
* {{qt3|QHBox}}, {{qt3|QVBox}}, {{qt3|QGrid}}를 사용하는 대신 레이아웃을 사용하십시오.
* Try not to use {{qt3|QHBox}}, {{qt3|QVBox}}, {{qt3|QGrid}}. Prefer layouts instead. 
* 프레임, 그룹 상자, 레이블, 라인 에디터 등으로 다른 위젯의 흉내를 내지 마십시오. 대신 올바른 위젯을 사용하십시오. 예를 들어, 라인 에디트 위젯의 경계를 움푹 들어가게 하기 위해서 위해서 레이블을 설정하는 대신 읽기 전용 {{class|KLineEdit}} 클래스를 사용하십시오. 복사할 수 있는 위젯에 대해서 경계선이 없는 {{class|KLineEdit}}를 사용하는 대신 {{class|KActiveLavel}} 클래스를 사용하십시오.
* Do NOT play with frames of groupboxes, labels, or lineedits to fake a different widget. Use the appropriate widget instead. e.g., instead of setting a label to have a sunken lineedit border, how about using a readonly {{class|KLineEdit}} instead? And instead of using a {{class|KLineEdit}} without a border for a copyable widget, use {{class|KActiveLabel}}.  
* 테두리 없는 그룹 상자로 위젯을 묶지 마십시오! 그 대신 레이아웃을 사용하십시오.
* Do NOT use a groupbox without border to group widgets! Just use a layout.


==Resources==  
==지원==  
===Documentation===  
===문서===
* [http://doc.trolltech.com/4.3 Qt4.3 Reference]  
* [http://doc.trolltech.com/4.3 Qt 4.3 참고 자료]
* [http://developer.kde.org/documentation/library/svn-api.php KDE4 API Reference]  
* [http://developer.kde.org/documentation/library/svn-api.php KDE4 API 참고 자료]
* [http://www.cmake.org/HTML/Documentation.html CMake Cross Platform Make]  
* [http://www.cmake.org/HTML/Documentation.html CMake: 크로스 플랫폼 Make]
* [http://websvn.kde.org/*checkout*/trunk/KDE/kdelibs/KDE4PORTING.html KDE4PORTING.html]
* [http://websvn.kde.org/*checkout*/trunk/KDE/kdelibs/KDE4PORTING.html KDE4PORTING.html]


===Other Help===   
===기타 도움===   
* #kde4-devel on irc.freenode.net 
* irc.freenode.net의 #kde4-devel 채널


[[Category:KDE4]]
[[Category:KDE4]]

Latest revision as of 15:51, 14 July 2012

소개

이 문서의 목적은 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 채널