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

From KDE TechBase
No edit summary
 
(14 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Template:I18n/Language Navigation Bar|Development/Tutorials/KDE4_Porting_Guide}}
 
 
{{TutorialBrowser (de)|
 
series=Grundlagen|
 
name=Anleitung zur Portierung nach KDE 4|
 
pre=|
 
next=[[Development/Tutorials/CMake (de)|Einführung in CMake]]|
 
reading=[http://www.trolltech.com/products/qt/whatsnew/porting "Moving from Qt 3 to Qt 4"]
}}


==Einführung==
==Einführung==
Line 12: Line 25:


==CMake==
==CMake==
Anders als KDE4 werden KDE4 Applikationen mit der Hilfe von [[Development/Tutorials/CMake (de)| CMake]] erstellt. Der einfachste Weg die autotools Dateien nach CMake zu portieren ist, das Script {{program|am2cmake}} zu benutzen, welches im Verzeichnis {{path|cmake/scripts}} des [http://websvn.kde.org/trunk/KDE/kdesdk/ kdesdk] Modules zu finden ist. Das erzeugt eine Reihe von {{path|CMakeLists.txt}} Dateien neben den alten autotools Dateien.
Anders als KDE3 werden KDE4 Applikationen mit der Hilfe von [[Development/Tutorials/CMake (de)| CMake]] erstellt. Der einfachste Weg die "autotools"-Dateien nach CMake zu portieren ist, das Script {{program|am2cmake}} zu benutzen, welches im Verzeichnis {{path|cmake/scripts}} des [http://websvn.kde.org/trunk/KDE/kdesdk/ kdesdk] Modules zu finden ist. Das erzeugt eine Reihe von {{path|CMakeLists.txt}} Dateien neben den alten autotools-Dateien.


Ist Ihr Code zum Beispiel unter {{path|/path/to/src}} gespeichert, dann:
Ist Ihr Code zum Beispiel unter {{path|/path/to/src}} gespeichert, dann:
<code bash>
<syntaxhighlight lang="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>
Führen Sie <tt>am2cmake --help</tt> aus, um zu prüfen, ob Sie das <tt>--kde4</tt> Flag benötigen.
Führen Sie <tt>am2cmake --help</tt> aus, um zu prüfen, ob Sie das <tt>--kde4</tt> Flag benötigen.


Weiterhin gibt es ein Werkzeug, welches in den erzeugten {{path|CMakeList.txt}} Dateien nach möglichen Problemen sucht. Dieses Werkzeugt heißt {{program|cmakelint.pl}} und ist unter{{path|$SVN/trunk/kde/kdesdk/scripts}} gespeichert.  Benutzen Sie es folgendermaßen:
Weiterhin gibt es ein Werkzeug, welches in den erzeugten {{path|CMakeList.txt}} Dateien nach möglichen Problemen sucht. Dieses Werkzeug heißt {{program|cmakelint.pl}} und ist unter {{path|$SVN/trunk/kde/kdesdk/scripts}} gespeichert.  Benutzen Sie es folgendermaßen:
<code bash>
<syntaxhighlight lang="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>
Oder wenden Sie es auf das gesamte Quellcodevrzeichnis an:
Oder wenden Sie es auf das gesamte Quellcodeverzeichnis an:
<code bash>
<syntaxhighlight lang="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==
Einen Überblick über den Übergang von Qt3 nach Qt4 wird in der Anleitung [http://www.trolltech.com/products/qt/whatsnew/porting "Moving from Qt 3 to Qt 4"] von Trolltech erläutert. Dieses Dokument bietet einen sehr guter Überblick über die Änderungen in der Funktionalität, die Qt4 mit sich bring und ist daher sehr zu empfehlen.
Ein Überblick über den Übergang von Qt3 nach Qt4 wird in der Anleitung [http://doc.qt.nokia.com/latest/porting4-overview.html "Moving from Qt 3 to Qt 4"] von Trolltech gegeben. Dieses Dokument bietet einen sehr guter Überblick über die Änderungen in der Funktionalität, die Qt4 mit sich bringt, und ist daher sehr zu empfehlen.


Die nachfolgende Anleitung [http://doc.trolltech.com/latest/porting4.html "Porting to Qt 4"] gibt eine sehr detailierte Beschreibung des Portierungsprozesses, neben einer Liste von Änderungen in den Klassen und Funktionen.
Die nachfolgende Anleitung [http://doc.qt.nokia.com/latest/porting4.html "Porting to Qt 4"] gibt eine sehr detailierte Beschreibung des Portierungsprozesses, neben einer Liste von Änderungen in den Klassen und Funktionen.


Diese Dokumente beschreiben auch ein Werkzeug, das von Trolltech zur Verfügung gestellt wird und sich {{program|qt3to4}} nennt. Dieses Programm kann dabei helfen, die Qt Teile Ihres Codes von Qt3 nach Qt4 zu portieren, indem es spezielle Funktionen zur Kompatibilität benutzt. Rufen Sie {{program|qt3to4}} folgendermaßen auf:
Diese Dokumente beschreiben auch ein Werkzeug, das von Trolltech zur Verfügung gestellt wird und sich {{program|qt3to4}} nennt. Dieses Programm kann dabei helfen, die Qt-Teile Ihres Codes von Qt3 nach Qt4 zu portieren, indem es spezielle Funktionen zur Kompatibilität benutzt. Rufen Sie {{program|qt3to4}} folgendermaßen auf:
<code bash>
<syntaxhighlight lang="bash">
% $SVN/trunk/qt-copy/bin/qt3to4 [options] <Infile>, [Infile], ...
% $SVN/trunk/qt-copy/bin/qt3to4 [options] <Infile>, [Infile], ...
</code>
</syntaxhighlight>
Infile kann eine Quellcodedatei oder eine Projektdatei sein. Möchten Sie eine Projektdatei angeben (mit der Endung '.pro' oder '.pri'), {{program|qt3to4}} wird alle Dateien portieren, die in dieser Datei angegeben sind.
Infile kann eine Quellcodedatei oder eine Projektdatei sein. Möchten Sie eine Projektdatei angeben (mit der Endung '.pro' oder '.pri'), wird {{program|qt3to4}} alle Dateien portieren, die in dieser Datei angegeben sind.


Für mehr Informationen können Sie {{program|qt3to4}} mit der "--help" Option aufrufen oder unter [http://doc.trolltech.com/latest/qt3to4.html "qt3to4-The Qt 3 to 4 Porting Tool"] nachschlagen.
Für mehr Informationen können Sie {{program|qt3to4}} mit der "--help" Option aufrufen oder unter [http://doc.qt.nokia.com/latest/qt3to4.html "qt3to4-The Qt 3 to 4 Porting Tool"] nachschlagen.


Weiterhin gibt es ein Programm namens {{program|remove-qt3-support.pl}} im Modul {{module|kdesdk}}, welches nach vielen veralteten Qt3 Strukturen sucht und diese ersetzt. Rufen Sie einfach dieses Programm ohne weitere Optionen im Quellverzeichnis auf.
Weiterhin gibt es ein Programm namens {{program|remove-qt3-support.pl}} im Modul {{module|kdesdk}}, welches nach vielen veralteten Qt3 Strukturen sucht und diese ersetzt. Rufen Sie einfach dieses Programm ohne weitere Optionen im Quellverzeichnis auf.
<code bash>
<syntaxhighlight lang="bash">
% $SVN/trunk/KDE/kdesdk/scripts/qt4/remove-qt3-support.pl
% $SVN/trunk/KDE/kdesdk/scripts/qt4/remove-qt3-support.pl
</code>
</syntaxhighlight>
 
Es kann passieren, daß einige Qt3-Klassen im Code verbleiben, daher sollten in der Datei CMakeLists.txt auf der höchsten Verzeichnisebene die Macros QT3_SUPPORT und QT3_SUPPORT_WARNINGS für die Qt-Header folgendermaßen definiert werden:
<syntaxhighlight lang="text">
add_definitions (-DQT3_SUPPORT -DQT3_SUPPORT_WARNINGS)
</syntaxhighlight>


==KDE4 API==
==KDE4 API==
Ein Großteil der Arbeit beim Portieren besteht einfach aus dem umbenennen von Klassen und Header-Dateien. Da es ziemlich ermüdend ist, dies von Hand zu machen, gibt es ein nützliches Script im {{path|scripts/qt4}} Verzeichnis des Modules {{module|kdesdk}} namens {{program|adapt-to-kde4-api.pl}}. Dieses scant alle Ihre Dateien und erzeugt eine {{program|diff}} Ausgabe, die dann benutzt werden kann, um Ihren Code zu patchen.  
Ein Großteil der Arbeit beim Portieren besteht einfach aus dem Umbenennen von Klassen und Header-Dateien. Da es ziemlich ermüdend ist, dies von Hand zu machen, gibt es ein nützliches Script im {{path|scripts/qt4}} Verzeichnis des Modules {{module|kdesdk}} namens {{program|adapt-to-kde4-api.pl}}. Dieses durchsucht alle Ihre Dateien und erzeugt eine {{program|diff}} Ausgabe, die dann benutzt werden kann, um Ihren Code zu patchen.
 
Wenn diese einfache Codeersetzung erledigt ist, müssen Sie trotzdem noch Ihren zu portierenden Code nachbearbeiten, zum Beispiel wegen der neuen <tt>KAction</tt> API. Über alle API-Änderungen informiert Sie die Datei [https://projects.kde.org/projects/kde/kdelibs/repository/revisions/master/raw/KDE4PORTING.html KDE4PORTING.html] des Modules {{module|kdelibs}}.


Wenn diese einfache Codeersetzung erledigt ist, müssen Sie trotzdem noch Ihren zu portierenden Code nachbearbeiten, zum Beispiel wegen der neuen <tt>KAction</tt> API. Über alle API Änderungen informiert Sie die Datei [http://websvn.kde.org/*checkout*/trunk/KDE/kdelibs/KDE4PORTING.html KDE4PORTING.html] des Modules {{module|kdelibs}}.
==Qt Designer UI-Dateien==
Die ".ui"-Dateien, die vom Qt Designer unter Qt3 produziert wurden müssen in das neue Qt4-Format konvertiert werden. Dazu kann man das Programm {{program|uic3}} benutze, welches in Ihrer Qt4-Installation zur Verfügung gestellt wird.


==Qt Designer UI Dateien==
<syntaxhighlight lang="bash">
Qt designer ".ui" files created using Qt3 must be converted to the new Qt4 formatThis can be done using the {{program|uic3}} program available from your Qt4 installation.
% $SVN/trunk/qt-copy/bin/uic3 -convert file.ui > foo.ui
  % mv foo.ui file.ui
</syntaxhighlight>


<code bash>
Oder, wenn Sie ein graphisches Werkzeug vorziehen, können Sie auch das Designer-Programm von Qt4 benutzen
% $SVN/trunk/qt-copy/bin/uic3 -convert file.ui > foo.ui
% mv foo.ui file.ui
</code>


Or, if you prefer a graphical tool, you can use Qt4's designer program
<syntaxhighlight lang="bash">
% $SVN/trunk/qt-copy/bin/designer file.ui
(you can save file.ui over top itself, or save to a new file)
</syntaxhighlight>
{{Warning (de)|Beachten Sie, dass durch den Konvertierungsprozess einige selbstdefinierten Slots, Tabellen Spalten, etc verloren gehen können. Es kann also sein, dass Sie diese Dinge dann von Hand wiederherstellen müssen.}}


<code bash>
Sie sollten auch das Programm {{program|fixuifiles}} aus dem Modul {{module|kdesdk}} ausführen, welches einige Säuberungen und Plausibilitätsprüfungen durchführt.
% $SVN/trunk/qt-copy/bin/designer file.ui
<syntaxhighlight lang="bash">
(you can save file.ui over top itself, or save to a new file)
% $SVN/trunk/KDE/kdesdk/scripts/fixuifiles
</code>
</syntaxhighlight>
{{Warning|Beware, the conversion process loses any custom slots, table columns, etc.  So, you may need to put some stuff back by hand.}}
You should also run the {{program|fixuifiles}} program from the {{module|kdesdk}} module, it performs cleanups and sanify checks:
<code bash>
% $SVN/trunk/KDE/kdesdk/scripts/fixuifiles
</code>


==D-Bus==
==D-Bus==
Line 82: Line 101:


==Icons==
==Icons==
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.
KDE4 richtet sich nach dem Namensschema für Icons, welches unter [http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html freedesktop.org icon naming specification] (englisch) spezifiziert wird. Das bedeutet, dass sowohl Icons die mit KDE4 (Oxygen) ausgeliefert werden, als auch Komponenten in kdelibs, die Icons benutzen diesem Schema folgen.


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.  
Um Ihre Applikation von den Iconnamen, die in KDE3 benutzt wurden, in diejenigen, die jetzt in KDE4 benutzt werden zu konvertieren, rufen Sie einfach das [http://websvn.kde.org/*checkout*/trunk/KDE/kdesdk/scripts/qt4/adapt-to-icon-spec.py adapt-to-icon-spec.py] Skript aus dem Wurzelverzeichnis Ihres Projekts auf und folgen Sie den Anweisungen auf dem Bildschirm.  


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.
Das Skript konvertiert automatisch alle Icons, die sicher eine überprüfbare Entsprechung haben (z.B. die Benutzung von KIcon oder KIconLoader), überspringt diejenigen die überprüfbar keine Entsprechung haben und fragt bei den fraglich positiven Fällen nach. Letzteres geschieht mit zusätzlichen Kontextinformationen (wenn das gewünscht ist) und so muß man nur 'y' oder 'n' drücken, um die möglichen Treffer zu bestätigen oder abzulehenen und den Portierungsvorgang abzuschließen.  


==Internationalization==
==Internationalization==
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.
Um Ihre ".pot" Datei zu erzeugen, kopieren Sie die Befehle aus der "messages"-Regel der {{path|Makefile.am}} Datei Ihres Projektes in ein Shell-Skript namens {{path|Messages.sh}}. Sie dürfen hier die gleichen Variablen ($PREPARETIPS, $XGETTEXT, $podir, etc.) als existent voraussetzen, doch beachten Sie, dass Makefiles und Shell-Skripten eine unterschiedliche Syntax haben.


Also be careful that if you use the -k parameter with $XGETTEXT, you will need to explicitely list all variants that you use.
Seien Sie auch vorsichtig, wenn Sie den "-k"-Parameter mit $XGETTTEXT benutzen. Dann müssen Sie explizit alle Varianten auflisten, die Sie benutzen.  


For example, the 'messages' creation rule:
So wird zum Beispiel aus der "messages"-Erzeugungsregel:
<code>
<syntaxhighlight lang="text">
messages: rc.cpp
messages: rc.cpp
         rm -f tips.cpp
         rm -f tips.cpp
         $(PREPARETIPS) > tips.cpp
         $(PREPARETIPS) > tips.cpp
         $(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>
becomes the following {{path|Messages.sh}} script:
folgendes {{path|Messages.sh}} Skript:
<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's und Don'ts==   
==Do's und Don'ts==   
* Do NOT use the old-style socket classes. 
* Benutzen Sie nicht die alten Socket-Klassen
* Do NOT use {{qt3|QPtrList}}, and in general, setAutoDelete()   
* Benutzen Sie nicht {{qt3|QPtrList}}, und allgemein, setAutoDelete()   
* Do NOT make use of raster operations.  
* Benutzen Sie keine Rasteroperationen.
* Do NOT do code painting on widgets outside paint events.  
* Kodieren Sie keine Darstellungsaufgaben außerhalb des paint events.
* Try not to use {{qt3|QHBox}}, {{qt3|QVBox}}, {{qt3|QGrid}}. Prefer layouts instead.   
* Vermeiden Sie die Benutzung von {{qt3|QHBox}}, {{qt3|QVBox}}, {{qt3|QGrid}}. Bevorzugen Sie lieber Layouts.   
* 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}}.   
* Spielen Sie nicht mit Rahmen von Groupboxes, Labels oder Lineedits um ein anderes Widget zu imitieren. Benutzen Sie lieber das passende Widget. Anstatt ein Label so zu ändern, dass es einen eingesunkenen Lineedit-Rand hat, lieber ein nur-lesen {{class|KLineEdit}} benutzen. Und statt {{class|KLineEdit}} ohne Rahmen für Widgets mit Kopierfunktion lieber {{class|KActiveLabel}} benutzen.   
* Do NOT use a groupbox without border to group widgets! Just use a layout.
* Benutzen Sie keine Groupbox ohne Rahmen um Widgets zu gruppieren. Statt dessen einfach ein Layout benutzen.


==Mehr Informationen==   
==Mehr Informationen==   
===Dokumentation===   
===Dokumentation===   
* [http://doc.trolltech.com/4.3 Qt4.3 Reference]   
* [http://doc.trolltech.com/4.3 Qt4.3 Reference]   
* [http://developer.kde.org/documentation/library/svn-api.php KDE4 API Reference]   
* [http://api.kde.org/ KDE4 API Reference]   
* [http://www.cmake.org/HTML/Documentation.html CMake Cross Platform Make]   
* [http://www.cmake.org/HTML/Documentation.html CMake Cross Platform Make]   
* [http://websvn.kde.org/*checkout*/trunk/KDE/kdelibs/KDE4PORTING.html KDE4PORTING.html]
* [https://projects.kde.org/projects/kde/kdelibs/repository/revisions/master/raw/KDE4PORTING.html KDE4PORTING.html]


===Weitere Hilfe===   
===Weitere Hilfe===   

Latest revision as of 15:26, 14 July 2012


Anleitung zur Portierung nach KDE 4
Anleitungsserie   Grundlagen
Voriges Kapitel  
Nächstes Kapitel   Einführung in CMake
Weiterführende Texte   "Moving from Qt 3 to Qt 4"
Navigation   Deutsche Startseite

Einführung

Diese Anleitung richtet sich an Entwickler, die ihre Qt3/KDE3 basierten Applikationen nach Qt4/KDE4 portieren wollen. Das muß nämlich kein komplizierter Prozess sein. Es gibt bereits viele Skripte und Dokumentationen, die dabei helfen.

Konventionen

Für die Anweisungen dieser Anleitung gelten folgende Konventionen:

  • program bezeichnet ein ausführbares Programm
  • path bezeichnet einen Pfad
  • file bezeichnet eine Datei
  • $SVN ist der vollständige Pfad zu Ihrem KDE subversion depot.

CMake

Anders als KDE3 werden KDE4 Applikationen mit der Hilfe von CMake erstellt. Der einfachste Weg die "autotools"-Dateien nach CMake zu portieren ist, das Script am2cmake zu benutzen, welches im Verzeichnis cmake/scripts des kdesdk Modules zu finden ist. Das erzeugt eine Reihe von CMakeLists.txt Dateien neben den alten autotools-Dateien.

Ist Ihr Code zum Beispiel unter /path/to/src gespeichert, dann:

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

Führen Sie am2cmake --help aus, um zu prüfen, ob Sie das --kde4 Flag benötigen.

Weiterhin gibt es ein Werkzeug, welches in den erzeugten CMakeList.txt Dateien nach möglichen Problemen sucht. Dieses Werkzeug heißt cmakelint.pl und ist unter $SVN/trunk/kde/kdesdk/scripts gespeichert. Benutzen Sie es folgendermaßen:

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

Oder wenden Sie es auf das gesamte Quellcodeverzeichnis an:

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

Qt4 API

Ein Überblick über den Übergang von Qt3 nach Qt4 wird in der Anleitung "Moving from Qt 3 to Qt 4" von Trolltech gegeben. Dieses Dokument bietet einen sehr guter Überblick über die Änderungen in der Funktionalität, die Qt4 mit sich bringt, und ist daher sehr zu empfehlen.

Die nachfolgende Anleitung "Porting to Qt 4" gibt eine sehr detailierte Beschreibung des Portierungsprozesses, neben einer Liste von Änderungen in den Klassen und Funktionen.

Diese Dokumente beschreiben auch ein Werkzeug, das von Trolltech zur Verfügung gestellt wird und sich qt3to4 nennt. Dieses Programm kann dabei helfen, die Qt-Teile Ihres Codes von Qt3 nach Qt4 zu portieren, indem es spezielle Funktionen zur Kompatibilität benutzt. Rufen Sie qt3to4 folgendermaßen auf:

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

Infile kann eine Quellcodedatei oder eine Projektdatei sein. Möchten Sie eine Projektdatei angeben (mit der Endung '.pro' oder '.pri'), wird qt3to4 alle Dateien portieren, die in dieser Datei angegeben sind.

Für mehr Informationen können Sie qt3to4 mit der "--help" Option aufrufen oder unter "qt3to4-The Qt 3 to 4 Porting Tool" nachschlagen.

Weiterhin gibt es ein Programm namens remove-qt3-support.pl im Modul kdesdk, welches nach vielen veralteten Qt3 Strukturen sucht und diese ersetzt. Rufen Sie einfach dieses Programm ohne weitere Optionen im Quellverzeichnis auf.

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

Es kann passieren, daß einige Qt3-Klassen im Code verbleiben, daher sollten in der Datei CMakeLists.txt auf der höchsten Verzeichnisebene die Macros QT3_SUPPORT und QT3_SUPPORT_WARNINGS für die Qt-Header folgendermaßen definiert werden:

 add_definitions (-DQT3_SUPPORT -DQT3_SUPPORT_WARNINGS)

KDE4 API

Ein Großteil der Arbeit beim Portieren besteht einfach aus dem Umbenennen von Klassen und Header-Dateien. Da es ziemlich ermüdend ist, dies von Hand zu machen, gibt es ein nützliches Script im scripts/qt4 Verzeichnis des Modules kdesdk namens adapt-to-kde4-api.pl. Dieses durchsucht alle Ihre Dateien und erzeugt eine diff Ausgabe, die dann benutzt werden kann, um Ihren Code zu patchen.

Wenn diese einfache Codeersetzung erledigt ist, müssen Sie trotzdem noch Ihren zu portierenden Code nachbearbeiten, zum Beispiel wegen der neuen KAction API. Über alle API-Änderungen informiert Sie die Datei KDE4PORTING.html des Modules kdelibs.

Qt Designer UI-Dateien

Die ".ui"-Dateien, die vom Qt Designer unter Qt3 produziert wurden müssen in das neue Qt4-Format konvertiert werden. Dazu kann man das Programm uic3 benutze, welches in Ihrer Qt4-Installation zur Verfügung gestellt wird.

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

Oder, wenn Sie ein graphisches Werkzeug vorziehen, können Sie auch das Designer-Programm von Qt4 benutzen

 % $SVN/trunk/qt-copy/bin/designer file.ui
 (you can save file.ui over top itself, or save to a new file)
noframe
noframe
Beachten Sie, dass durch den Konvertierungsprozess einige selbstdefinierten Slots, Tabellen Spalten, etc verloren gehen können. Es kann also sein, dass Sie diese Dinge dann von Hand wiederherstellen müssen.
Warnung


Sie sollten auch das Programm fixuifiles aus dem Modul kdesdk ausführen, welches einige Säuberungen und Plausibilitätsprüfungen durchführt.

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

D-Bus

Statt DCOP, wie es in KDE3 benutzt wird, kommt in KDE4 nun D-Bus für die Kommunikation zwischen Prozessen (interprocess communication) zum Einsatz. Die Portierung von DCOP nach D-BUS ist ein großes Thema, welches im Detail in der Anleitung Porting to D-Bus (in englisch) beschrieben wird.

Für mehr Informationen sehen Sie bitte auch D-Bus tutorials.

Icons

KDE4 richtet sich nach dem Namensschema für Icons, welches unter freedesktop.org icon naming specification (englisch) spezifiziert wird. Das bedeutet, dass sowohl Icons die mit KDE4 (Oxygen) ausgeliefert werden, als auch Komponenten in kdelibs, die Icons benutzen diesem Schema folgen.

Um Ihre Applikation von den Iconnamen, die in KDE3 benutzt wurden, in diejenigen, die jetzt in KDE4 benutzt werden zu konvertieren, rufen Sie einfach das adapt-to-icon-spec.py Skript aus dem Wurzelverzeichnis Ihres Projekts auf und folgen Sie den Anweisungen auf dem Bildschirm.

Das Skript konvertiert automatisch alle Icons, die sicher eine überprüfbare Entsprechung haben (z.B. die Benutzung von KIcon oder KIconLoader), überspringt diejenigen die überprüfbar keine Entsprechung haben und fragt bei den fraglich positiven Fällen nach. Letzteres geschieht mit zusätzlichen Kontextinformationen (wenn das gewünscht ist) und so muß man nur 'y' oder 'n' drücken, um die möglichen Treffer zu bestätigen oder abzulehenen und den Portierungsvorgang abzuschließen.

Internationalization

Um Ihre ".pot" Datei zu erzeugen, kopieren Sie die Befehle aus der "messages"-Regel der Makefile.am Datei Ihres Projektes in ein Shell-Skript namens Messages.sh. Sie dürfen hier die gleichen Variablen ($PREPARETIPS, $XGETTEXT, $podir, etc.) als existent voraussetzen, doch beachten Sie, dass Makefiles und Shell-Skripten eine unterschiedliche Syntax haben.

Seien Sie auch vorsichtig, wenn Sie den "-k"-Parameter mit $XGETTTEXT benutzen. Dann müssen Sie explizit alle Varianten auflisten, die Sie benutzen.

So wird zum Beispiel aus der "messages"-Erzeugungsregel:

 messages: rc.cpp
        rm -f tips.cpp
        $(PREPARETIPS) > tips.cpp
        $(XGETTEXT) -ktranslate *.cpp *.h -o $(podir)/kmail.pot
        rm -f tips.cpp

folgendes Messages.sh Skript:

 #! /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

Do's und Don'ts

  • Benutzen Sie nicht die alten Socket-Klassen
  • Benutzen Sie nicht QPtrList, und allgemein, setAutoDelete()
  • Benutzen Sie keine Rasteroperationen.
  • Kodieren Sie keine Darstellungsaufgaben außerhalb des paint events.
  • Vermeiden Sie die Benutzung von QHBox, QVBox, QGrid. Bevorzugen Sie lieber Layouts.
  • Spielen Sie nicht mit Rahmen von Groupboxes, Labels oder Lineedits um ein anderes Widget zu imitieren. Benutzen Sie lieber das passende Widget. Anstatt ein Label so zu ändern, dass es einen eingesunkenen Lineedit-Rand hat, lieber ein nur-lesen KLineEdit benutzen. Und statt KLineEdit ohne Rahmen für Widgets mit Kopierfunktion lieber KActiveLabel benutzen.
  • Benutzen Sie keine Groupbox ohne Rahmen um Widgets zu gruppieren. Statt dessen einfach ein Layout benutzen.

Mehr Informationen

Dokumentation

Weitere Hilfe

  • #kde4-devel on irc.freenode.net