Development/Tutorials/KDE4 Porting Guide (fi): Difference between revisions
(Tästä se lähtee..) |
No edit summary |
||
(12 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
==Esipuhe== | ==Esipuhe== | ||
Tämä | Tämä ohje tarkoitettu ohjelmistokehittäjille auttamaan heitä siirtämään Qt3/KDE3 -ohjelmisto Qt4/KDE4-ympäristöön. KDE3-ohjelmien siirron ei välttämättä tarvitse olla hankala prosessi. On olemassa valmiina monia komentojonoja ja dokumentaatiolähteitä, jotka helpottavat tätä siirtoa. | ||
== | ==Käsitteet== | ||
Tämän perehdytyksen ohjeissa käytetään seuraavia käsitteitä: | |||
* {{program|program}} | * {{program|program}} kuvaa suoritettavaa tiedostoa, ohjelmaa | ||
* {{path|path}} | * {{path|path}} kuvaa polkua | ||
* {{path|file}} | * {{path|file}} kuvaa tiedostoa | ||
* $SVN | * $SVN on täydellinen polku paikalliseen kopioon KDE:n SVN kopiosta | ||
==CMake== | ==CMake== | ||
KDE3-ohjelmista poiketen KDE4-ohjelmat käännetään [[Development/Tutorials/CMake (fi)| CMakea]] apuna käyttäen. Helpoin tapa siirtää "autotools system" CMakelle on käyttää apuna {{program|am2cmake}}-komentojonoa joka löytyy [http://websvn.kde.org/trunk/KDE/kdesdk/ kdesdk] moduulin alta {{path|cmake/scripts}}-hakemistosta. {{program|am2cmake}} luo vanhan käännösjärjestelmän tiedostojen määrästä riippuen joukon {{path|CMakeLists.txt}}-tiedostoja. | |||
Esimerkiksi jos lähdekoodisi sijaitsee {{path|/path/to/src}}-hakemistossa, niin: | |||
< | <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 | ||
</ | </syntaxhighlight> | ||
Suorita <tt> am2cmake --help</tt> tarkistaaksesi tarvitsetko <tt>--kde4</tt> valitsinta. | |||
Samasta {{path|$SVN/trunk/kde/kdesdk/scripts}}-hakemistosta löytyy myös {{program|cmakelint.pl}}-niminen työkalu, jolla voit tarkistaa uusien {{path|CMakeList.txt}}-tiedostojen mahdolliset ongelmat. Käyttö: | |||
< | <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 | ||
</ | </syntaxhighlight> | ||
Tai, jos tarkistat kaikki {{path|CMakeLists.txt}} lähdekoodi hakemistostasi: | |||
< | <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 | ||
</ | </syntaxhighlight> | ||
==Qt4 API== | ==Qt4 API== | ||
Aluksi on erittäin suositeltavaa tutustua Trolltech:n tuottamaan [http://www.trolltech.com/products/qt/whatsnew/porting "Moving from Qt 3 to Qt 4"]-dokumenttiin, josta löytyy erittäin hyvä yleiskatsaus suuremmista muutoksista siirryttäessä Qt3:sta Qt4:n. | |||
Seuraavana löytyy [http://doc.trolltech.com/latest/porting4.html "Porting to Qt 4"]-dokumentti, jossa on kerrottu hyvin yksityiskohtaisesti siirrosprosessista. Sivustossa on yksityiskohtaisesti listattu luokkien ja funktioiden muutokset. | |||
Näissä dokumenteissa on esitelty Trolltechin tuottama työkalu nimeltä {{program|qt3to4}}, joka on tarkoitettu yhteensopivuus funktioita apuna käyttäen helpottamaan koodin Qt-osuuksien siirtämistä Qt3:sta Qt4:n. Käytä {{program|qt3to4}} seuraavasti: | |||
< | <syntaxhighlight lang="bash"> | ||
% $SVN/trunk/qt-copy/bin/qt3to4 [options] <Infile>, [Infile], ... | % $SVN/trunk/qt-copy/bin/qt3to4 [options] <Infile>, [Infile], ... | ||
</ | </syntaxhighlight> | ||
Infile | Infile voi olla joko lähdekooditiedosto tai projektitiedosto. Jos käytät projektitiedostoa, pääte joko '.pro' tai '.pri', {{program|qt3to4}} käy läpi kaikki tiedostot, jotka kuuluvat projektiin. | ||
Lisätietoja saat suorittamalla komennon {{program|qt3to4}} '--help' valitsimen kanssa tai tutustumalla sivuun [http://doc.trolltech.com/latest/qt3to4.html "qt3to4-The Qt 3 to 4 Porting Tool"]. | |||
Lisäksi {{module|kdesdk}}-moduulissa on työkalu nimeltä {{program|remove-qt3-support.pl}}. Se etsii ja korvaa suuren osan vanhentuneita Qt3-asioita puolestasi. Aja tämä työkalu ilman valitsimia lähdekoodihakemistossasi: | |||
< | <syntaxhighlight lang="bash"> | ||
% $SVN/trunk/KDE/kdesdk/scripts/qt4/remove-qt3-support.pl | % $SVN/trunk/KDE/kdesdk/scripts/qt4/remove-qt3-support.pl | ||
</ | </syntaxhighlight> | ||
Koska on mahdollista, että joitain Qt3 luokkia jää vielä koodiin, varmista että lähdekoodihakemistosi juuren CMakeLists.txt tiedostossa on määritelty sekä QT3_SUPPORT että QT3_SUPPORT_WARNINGS -makrot Qt-otsikkotiedostoille. Esim: | |||
< | <syntaxhighlight lang="text"> | ||
add_definitions (-DQT3_SUPPORT -DQT3_SUPPORT_WARNINGS) | add_definitions (-DQT3_SUPPORT -DQT3_SUPPORT_WARNINGS) | ||
</ | </syntaxhighlight> | ||
==KDE4 API== | ==KDE4 API== | ||
Line 66: | Line 65: | ||
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. | 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. | ||
< | <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 | ||
</ | </syntaxhighlight> | ||
Or, if you prefer a graphical tool, you can use Qt4's designer program | 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 | % $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) | ||
</ | </syntaxhighlight> | ||
{{Warning|Beware, the conversion process loses any custom slots, table columns, etc. So, you may need to put some stuff back by hand.}} | {{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 sanity checks: | You should also run the {{program|fixuifiles}} program from the {{module|kdesdk}} module, it performs cleanups and sanity checks: | ||
< | <syntaxhighlight lang="bash"> | ||
% $SVN/trunk/KDE/kdesdk/scripts/fixuifiles | % $SVN/trunk/KDE/kdesdk/scripts/fixuifiles | ||
</ | </syntaxhighlight> | ||
==D-Bus== | ==D-Bus== | ||
Line 101: | Line 100: | ||
For example, the 'messages' creation rule: | For example, the 'messages' creation rule: | ||
< | <syntaxhighlight lang="text"> | ||
messages: rc.cpp | messages: rc.cpp | ||
rm -f tips.cpp | rm -f tips.cpp | ||
Line 107: | Line 106: | ||
$(XGETTEXT) -ktranslate *.cpp *.h -o $(podir)/kmail.pot | $(XGETTEXT) -ktranslate *.cpp *.h -o $(podir)/kmail.pot | ||
rm -f tips.cpp | rm -f tips.cpp | ||
</ | </syntaxhighlight> | ||
becomes the following {{path|Messages.sh}} script: | becomes the following {{path|Messages.sh}} script: | ||
< | <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 | ||
</ | </syntaxhighlight> | ||
==Do's and Don'ts== | ==Do's and Don'ts== |
Latest revision as of 09:52, 15 July 2012
Esipuhe
Tämä ohje tarkoitettu ohjelmistokehittäjille auttamaan heitä siirtämään Qt3/KDE3 -ohjelmisto Qt4/KDE4-ympäristöön. KDE3-ohjelmien siirron ei välttämättä tarvitse olla hankala prosessi. On olemassa valmiina monia komentojonoja ja dokumentaatiolähteitä, jotka helpottavat tätä siirtoa.
Käsitteet
Tämän perehdytyksen ohjeissa käytetään seuraavia käsitteitä:
- program kuvaa suoritettavaa tiedostoa, ohjelmaa
- path kuvaa polkua
- file kuvaa tiedostoa
- $SVN on täydellinen polku paikalliseen kopioon KDE:n SVN kopiosta
CMake
KDE3-ohjelmista poiketen KDE4-ohjelmat käännetään CMakea apuna käyttäen. Helpoin tapa siirtää "autotools system" CMakelle on käyttää apuna am2cmake-komentojonoa joka löytyy kdesdk moduulin alta cmake/scripts-hakemistosta. am2cmake luo vanhan käännösjärjestelmän tiedostojen määrästä riippuen joukon CMakeLists.txt-tiedostoja.
Esimerkiksi jos lähdekoodisi sijaitsee /path/to/src-hakemistossa, niin:
% cd /path/to/src
% $SVN/trunk/KDE/kdesdk/cmake/scripts/am2cmake --kde4
Suorita am2cmake --help tarkistaaksesi tarvitsetko --kde4 valitsinta.
Samasta $SVN/trunk/kde/kdesdk/scripts-hakemistosta löytyy myös cmakelint.pl-niminen työkalu, jolla voit tarkistaa uusien CMakeList.txt-tiedostojen mahdolliset ongelmat. Käyttö:
% cd /path/to/src
% $SVN/trunk/KDE/kdesdk/scripts/cmakelint.pl CMakeLists.txt
Tai, jos tarkistat kaikki CMakeLists.txt lähdekoodi hakemistostasi:
% cd /path/to/src
% find . -name CMakeLists.txt | \
xargs $SVN/trunk/KDE/kdesdk/scripts/cmakelint.pl
Qt4 API
Aluksi on erittäin suositeltavaa tutustua Trolltech:n tuottamaan "Moving from Qt 3 to Qt 4"-dokumenttiin, josta löytyy erittäin hyvä yleiskatsaus suuremmista muutoksista siirryttäessä Qt3:sta Qt4:n.
Seuraavana löytyy "Porting to Qt 4"-dokumentti, jossa on kerrottu hyvin yksityiskohtaisesti siirrosprosessista. Sivustossa on yksityiskohtaisesti listattu luokkien ja funktioiden muutokset.
Näissä dokumenteissa on esitelty Trolltechin tuottama työkalu nimeltä qt3to4, joka on tarkoitettu yhteensopivuus funktioita apuna käyttäen helpottamaan koodin Qt-osuuksien siirtämistä Qt3:sta Qt4:n. Käytä qt3to4 seuraavasti:
% $SVN/trunk/qt-copy/bin/qt3to4 [options] <Infile>, [Infile], ...
Infile voi olla joko lähdekooditiedosto tai projektitiedosto. Jos käytät projektitiedostoa, pääte joko '.pro' tai '.pri', qt3to4 käy läpi kaikki tiedostot, jotka kuuluvat projektiin.
Lisätietoja saat suorittamalla komennon qt3to4 '--help' valitsimen kanssa tai tutustumalla sivuun "qt3to4-The Qt 3 to 4 Porting Tool".
Lisäksi kdesdk-moduulissa on työkalu nimeltä remove-qt3-support.pl. Se etsii ja korvaa suuren osan vanhentuneita Qt3-asioita puolestasi. Aja tämä työkalu ilman valitsimia lähdekoodihakemistossasi:
% $SVN/trunk/KDE/kdesdk/scripts/qt4/remove-qt3-support.pl
Koska on mahdollista, että joitain Qt3 luokkia jää vielä koodiin, varmista että lähdekoodihakemistosi juuren CMakeLists.txt tiedostossa on määritelty sekä QT3_SUPPORT että QT3_SUPPORT_WARNINGS -makrot Qt-otsikkotiedostoille. Esim:
add_definitions (-DQT3_SUPPORT -DQT3_SUPPORT_WARNINGS)
KDE4 API
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 scripts/qt4 directory of kdesdk called adapt-to-kde4-api.pl. This will scan all your files and create a diff output which can then be used to patch your code.
Once that simple code substitution has been done, you will still have to go through your code to port to, for example, the new KAction API. Documentation about all API changes is kept in the KDE4PORTING.html file in the kdelibs module.
Qt Designer UI Files
Qt designer ".ui" files created using Qt3 must be converted to the new Qt4 format. This can be done using the uic3 program available from your Qt4 installation.
% $SVN/trunk/qt-copy/bin/uic3 -convert file.ui > foo.ui
% mv foo.ui file.ui
Or, if you prefer a graphical tool, you can use Qt4's designer program
% $SVN/trunk/qt-copy/bin/designer file.ui
(you can save file.ui over top itself, or save to a new file)
You should also run the fixuifiles program from the kdesdk module, it performs cleanups and sanity checks:
% $SVN/trunk/KDE/kdesdk/scripts/fixuifiles
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 Porting to D-Bus tutorial.
For more information, please see all our D-Bus tutorials.
Icons
KDE4 uses the 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.
Porting your app from the icon names used in KDE3 to the ones used in KDE4 is as easy as running the adapt-to-icon-spec.py script from the root directory of your project and follow the instructions on screen.
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.
Internationalization
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.
Also be careful that if you use the -k parameter with $XGETTEXT, you will need to explicitly list all variants that you use.
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
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
Do's and Don'ts
- Do NOT use the old-style socket classes.
- Do NOT use QPtrList, and in general, setAutoDelete()
- Do NOT make use of raster operations.
- Do NOT do code painting on widgets outside paint events.
- Try not to use QHBox, QVBox, QGrid. Prefer layouts instead.
- 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 KLineEdit instead? And instead of using a KLineEdit without a border for a copyable widget, use KActiveLabel.
- Do NOT use a groupbox without border to group widgets! Just use a layout.
Resources
Documentation
Other Help
- #kde4-devel on irc.freenode.net