<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4333452232975601150</id><updated>2018-05-20T17:55:09.906+02:00</updated><category term="QT"/><category term="QT4"/><category term="Opensource"/><category term="C++"/><category term="NSIS"/><category term="qmake"/><category term="CMake"/><category term="I18N"/><category term="OS X"/><category term="LRELEASE"/><category term="Mac"/><category term="DMG"/><category term="JAVA"/><category term="LINGUIST"/><category term="LUPDATE"/><category term="QDOC"/><category term="QT5"/><category term="Windows"/><category term="Xcode"/><category term="asciidoc"/><category term=".NET"/><category term="C#"/><category term="DEB"/><category term="GTK"/><category term="GUI"/><category term="IDE"/><category term="Installationspakte"/><category term="LaTex"/><category term="Linux"/><category term="MINGW"/><category term="Objective-C"/><category term="Pakete"/><category term="QTCreator"/><category term="QTHelp"/><category term="RPM"/><category term="TGZ"/><category term="ZIP"/><category term="jmnsishelper"/><category term="mono"/><category term="monodevelop"/><category term="Assistant"/><category term="C"/><category term="CMD"/><category term="Festplattendienstprogramm"/><category term="GUID"/><category term="Inno Setup"/><category term="Installation"/><category term="JDK"/><category term="Lokalisierung"/><category term="MacOS"/><category term="Programmanleitung"/><category term="QM"/><category term="RCC"/><category term="SDK"/><category term="Skript"/><category term="VBS"/><category term="WiX"/><category term="XIB"/><category term="cd"/><category term="docbook"/><category term="doxygen"/><category term="hdiutil"/><category term="headerdoc2html"/><category term="ibtool"/><category term="javadoc"/><category term="javahelp"/><category term="ln"/><category term="ls"/><category term="xcodebuild"/><title type='text'>Jürgen&#39;s programmier blog</title><subtitle type='html'>In meinem Blog berichte ich über das QT-Framework, Objective-C und Xcode.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-5580803811621179559</id><published>2017-12-21T10:51:00.000+01:00</published><updated>2017-12-21T10:51:11.184+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MacOS"/><category scheme="http://www.blogger.com/atom/ns#" term="QT5"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>jmbde-QT V 0.5.0</title><content type='html'>&lt;em&gt;Das Programm it noch pre alph&lt;/em&gt;a.&lt;br /&gt;&lt;br /&gt;Die neueste Version des Source-Codes wurde auf &amp;nbsp;&lt;a href=&quot;https://github.com/jmuelbert/jmbde-QT&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&amp;nbsp;veröffentlicht. Das Programm funktioniert bereits kann aber noch nicht produktiv eingesetzt werden. Es können Datensätze hinzugefügt oder geändert werden.&lt;br /&gt;&lt;br /&gt;Getestet habe ich es mit macOS 10.13 und Windows 10.</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/5580803811621179559/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2017/12/jmbde-qt-v-050.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/5580803811621179559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/5580803811621179559'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2017/12/jmbde-qt-v-050.html' title='jmbde-QT V 0.5.0'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-3568374634398260690</id><published>2014-05-10T15:59:00.001+02:00</published><updated>2014-05-10T15:59:56.640+02:00</updated><title type='text'>Qt 5.3 Release Candidate Available</title><content type='html'>&lt;a href=&quot;http://blog.qt.digia.com/blog/2014/05/08/qt-5-3-release-candidate-available/&quot;&gt;Qt 5.3 Release Candidate Available&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/3568374634398260690/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2014/05/qt-53-release-candidate-available.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/3568374634398260690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/3568374634398260690'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2014/05/qt-53-release-candidate-available.html' title='Qt 5.3 Release Candidate Available'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-860933521234158536</id><published>2013-12-15T19:15:00.000+01:00</published><updated>2013-12-15T19:21:14.306+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="GUID"/><category scheme="http://www.blogger.com/atom/ns#" term="Inno Setup"/><category scheme="http://www.blogger.com/atom/ns#" term="NSIS"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT5"/><category scheme="http://www.blogger.com/atom/ns#" term="WiX"/><title type='text'>QT Projekte als MSI-Pakete vertreiben</title><content type='html'>Wenn man versucht Programme zu schreiben, will man diese auch irgendwann unter die Leute bringen. Dabei hilft ein guter Installations-Paket-Generator. Hier werden verschiedene Möglichkeiten angeboten. Ich habe einiges probiert und getestet. Es gibt für das Windows Betriebssystem sowohl Freie wie auch kommerzielle Paket Generatoren. Ich bevorzuge die freien Versionen.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Möglichkeiten&lt;/h2&gt;&lt;br /&gt;Lange Zeit habe ich mit &lt;a href=&quot;http://nsis.sourceforge.net/Main_Page&quot; target=&quot;_blank&quot;&gt;NSIS&lt;/a&gt; gearbeitet. Aber ich denke das Projekt wird im Moment nicht mehr sehr aktiv gepflegt. Es gibt zwar wieder ein Release vom 14. Juli 2013. Aber das ist das erste seit 2009.&lt;br /&gt;&lt;br /&gt;Aus diesem Grund habe ich dann einfach &lt;a href=&quot;http://www.jrsoftware.org/&quot; target=&quot;_blank&quot;&gt;Inno Setup&lt;/a&gt; getestet. Ich ich muss sagen das ist ein richtiger Lichtblick. Da ist einiges einfacher als in &lt;a href=&quot;http://nsis.sourceforge.net/Main_Page&quot; target=&quot;_blank&quot;&gt;NSIS&lt;/a&gt;. Zumal es hier ein GUI gibt. Mit dieser Grafischen Benutzeroberfläche lassen sich schnell und einfach Programmpaket erstellen.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;MSI&lt;/h2&gt;&lt;br /&gt;Aber &lt;a href=&quot;http://www.microsoft.com/de-de/default.aspx&quot; target=&quot;_blank&quot;&gt;Microsoft&lt;/a&gt; geht in den neueren Versionen von &lt;a href=&quot;http://windows.microsoft.com/en-US/windows/home&quot; target=&quot;_blank&quot;&gt;Windows&lt;/a&gt; etwas andere Wege. Mit Windows wird ein Installationsprogramm ausgeliefert. Das Installationspaket selbst ist dabei nur noch eine Datenbank. Also wenn man schnell ein Programmpaket vertreiben will ist der einfachste Weg, man nutzt Inno Setup oder die freie Version von des &lt;a href=&quot;http://www.advancedinstaller.com/&quot; target=&quot;_blank&quot;&gt;Advanced Installer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ich habe zwar nur den &lt;a href=&quot;http://www.jrsoftware.org/&quot; target=&quot;_blank&quot;&gt;Inno Setup&lt;/a&gt; getestet. Aber mit diesem Programm ist es wirklich einfach ein eigenes Projekt zur Installation bereitzustellen. &lt;a href=&quot;http://www.jrsoftware.org/&quot; target=&quot;_blank&quot;&gt;Inno Setup&lt;/a&gt; erzeugt eine EXE mit einem beinhalteten Programm, das dann die eigentliche Installation durchführt.&lt;br /&gt;&lt;br /&gt;Den &lt;a href=&quot;http://www.advancedinstaller.com/&quot; target=&quot;_blank&quot;&gt;Advanced Installer&lt;/a&gt; habe ich noch nicht getestet. Dieses Programm erzeugt immerhin &lt;a href=&quot;http://de.wikipedia.org/wiki/Windows_Installer&quot; target=&quot;_blank&quot;&gt;MSI&lt;/a&gt;’s&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;WiX&lt;/h2&gt;&lt;br /&gt;Um alle Möglichkeiten auszuschöpfen die ein &lt;a href=&quot;http://de.wikipedia.org/wiki/Windows_Installer&quot; target=&quot;_blank&quot;&gt;MSI&lt;/a&gt; Paket bieten könnte führt aber kein Weg an einem kommerziellen Programm oder &lt;a href=&quot;http://de.wikipedia.org/wiki/Windows_Installer_XML&quot; target=&quot;_blank&quot;&gt;WiX&lt;/a&gt; vorbei. &lt;a href=&quot;http://de.wikipedia.org/wiki/Windows_Installer_XML&quot; target=&quot;_blank&quot;&gt;WiX&lt;/a&gt; ist der &lt;a href=&quot;http://de.wikipedia.org/wiki/Windows_Installer_XML&quot; target=&quot;_blank&quot;&gt;Windows Installer XML&lt;/a&gt;, der ein komplettes Toolset zur Generierung von &lt;a href=&quot;http://de.wikipedia.org/wiki/Windows_Installer&quot; target=&quot;_blank&quot;&gt;MSI&lt;/a&gt;’s zur Verfügung stellt. &lt;a href=&quot;http://de.wikipedia.org/wiki/Windows_Installer_XML&quot; target=&quot;_blank&quot;&gt;WiX&lt;/a&gt; wird von Microsoft als freie Software zur Verfügung gestellt.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Windows_Installer_XML&quot; target=&quot;_blank&quot;&gt;WiX&lt;/a&gt; habe ich für mein aktuelles Projekt genutzt. Nun gut es kostet Nerven und einige Zeit bis man durchblickt. Aber es hat nicht nur den Vorteil kostenlos zu sein. Man muss die XML-Dateien zwar schreiben und an verschiedene Stellen &lt;a href=&quot;http://de.wikipedia.org/wiki/Globally_Unique_Identifier&quot; target=&quot;_blank&quot;&gt;GUID&lt;/a&gt;’s eintragen. Aber es besteht die Möglichkeit Modul zu verwenden. Ich programmiere zur Zeit mit &lt;a href=&quot;http://qt-project.org/&quot; target=&quot;_blank&quot;&gt;Qt&lt;/a&gt; und konnte dank &lt;a href=&quot;http://de.wikipedia.org/wiki/Windows_Installer_XML&quot; target=&quot;_blank&quot;&gt;WiX&lt;/a&gt; eine Modul-Datei schreiben die alle benötigten DLL’s in das &lt;a href=&quot;http://de.wikipedia.org/wiki/Windows_Installer&quot; target=&quot;_blank&quot;&gt;MSI&lt;/a&gt; packt und später in das richtige Verzeichnis in dem Zielsystem schreibt. Dieses Modul lässt sich in allen Projekte einsetzen die &lt;a href=&quot;http://qt-project.org/&quot; target=&quot;_blank&quot;&gt;Qt&lt;/a&gt; verwenden.</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/860933521234158536/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2013/12/qt-als-msi-vertreiben.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/860933521234158536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/860933521234158536'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2013/12/qt-als-msi-vertreiben.html' title='QT Projekte als MSI-Pakete vertreiben'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-7211724178314851061</id><published>2013-09-21T18:55:00.000+02:00</published><updated>2013-09-21T18:55:20.346+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Installationspakte"/><category scheme="http://www.blogger.com/atom/ns#" term="MINGW"/><category scheme="http://www.blogger.com/atom/ns#" term="Pakete"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT5"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Qt5 Windows Programme veröffentlichen</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=4333452232975601150&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://www.blogger.com/blogger.g?blogID=4333452232975601150&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;Es ist schön mit Qt Programme zu erstellen. Das &lt;a href=&quot;http://qt-project.org/&quot; target=&quot;_blank&quot;&gt;Qt-Projekt&lt;/a&gt; hat eine gute und komplett API mit sehr vielen Klassen und Funktion. Das ganze Paket ist genauso komplett wie die von Apple zur Verfügung gestellte Klassenbibliothek. Gegenüber dem Toolkit von Apple hat die Qt-Biblothek einen starken Vorteil; Programme die mit dem Qt als Grundlage entwickelt wurden laufen überall. Die Projekte müssen nur noch auf der Zielplattform neu kompiliert werden.&lt;br /&gt;Ein Programm das in die Qt5 Bibliotheken eingebunden wurde ist recht  klein. Das ist kein Wunder, denn durch die vielen Bereitgestellten  Funktionen kann man sich einige Zeilen Code sparen.&lt;br /&gt;&lt;br /&gt;Es müssen Grundsätzlich alle Qt5 Bibliotheken mitgegeben werden mit denen das Programm auch gebaut wurde. Diese sind leicht zu identifizieren. In der &quot;pro&quot; Datei sind die leicht zu finden.&lt;br /&gt;&lt;br /&gt;Die Zeile&lt;br /&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;p, li { white-space: pre-wrap; } &lt;/style&gt; &lt;br /&gt;&lt;pre style=&quot;-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;&quot;&gt;&lt;span style=&quot;color: purple;&quot;&gt;QT&lt;/span&gt;&lt;span style=&quot;color: silver;&quot;&gt;       &lt;/span&gt;+=&lt;span style=&quot;color: silver;&quot;&gt; &lt;/span&gt;core&lt;span style=&quot;color: silver;&quot;&gt; &lt;/span&gt;gui&lt;span style=&quot;color: silver;&quot;&gt; &lt;/span&gt;sql&lt;/pre&gt;&lt;pre style=&quot;-qt-block-indent: 0; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-indent: 0px;&quot;&gt;&amp;nbsp;&lt;/pre&gt;sagt aus: Dieses Projekt benötigt die Core, die Gui und dieSql Bibliothek. Für ein Qt5 Projekt wird zusätzlich immer noch die Widget Bibliothek benötigt.&lt;br /&gt;&lt;h2&gt;Ein Setup Paket zusammenstellen&lt;/h2&gt;In der &lt;a href=&quot;http://www.microsoft.com/de-de/default.aspx&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Microsoft&lt;/a&gt;-Welt ist es unbedingt notwendig sicherzustellen dass die Biblotheken alle zur Verfügung stehen. Qt steht in der Windows Welt in zwei &lt;a href=&quot;http://de.wikipedia.org/wiki/Open_Source&quot; target=&quot;_blank&quot;&gt;Opensource&lt;/a&gt; Versionen zur Verfügung. Eine Version basiert auf die VS Umgebung. Somit wird die von Microsoft zur Verfügung gestellte Entwicklungsumgebung VisualStudio genutzt. Hauptsächlich wird aber eine auf &lt;a href=&quot;http://www.mingw.org/&quot; target=&quot;_blank&quot;&gt;MinGW&lt;/a&gt; 4.8 basierende Entwicklungsumgebung zur Verfügung gestellt. Diese nutze ich auch. Da die zur Verfügung gestellten Pakete in der jeweiligen Umgebung gebaut wurden, müssen auch die Progamme zur Laufzeit die richtigen &quot;&lt;a href=&quot;http://de.wikipedia.org/wiki/Dynamic_Link_Library&quot; target=&quot;_blank&quot;&gt;dll&#39;s&lt;/a&gt;&quot; finden.&lt;br /&gt;Zu allem Überfluss wird auch noch einen vorgegebene Ordnerstruktur erwartet. Wenn das eigene Programm und die Standardbibliotheken die Ordnerstruktur und die für die Ausführung nötigen Bibliotheken nicht findet hagelt es Fehlermeldungen.&lt;br /&gt;&lt;br /&gt;Hier eine Bildschirmkopie meines aktuellen Projekts.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;data:image/png;base64,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&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id=&quot;goog_26630912&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_26630913&quot;&gt;&lt;/span&gt;&lt;br /&gt;Hier sind die alle für das Programm notwendigen Bibliotheken (dll&#39;s) enthalten.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;libgcc_s_dw2-1.dll&amp;nbsp;&amp;nbsp; - GNU Compiler dll &lt;/li&gt;&lt;li&gt;libstdc++6.dll&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - GNU Standard C++ Bibliothek&lt;/li&gt;&lt;li&gt;libwinpthreads-1.dll - GNU Threads für Windows&lt;/li&gt;&lt;li&gt;icudt51.dll&lt;/li&gt;&lt;li&gt;icuin51.dll&lt;/li&gt;&lt;li&gt;icuuc51.dll&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - International Component for Unicode&lt;/li&gt;&lt;li&gt;Qt5Core.dll &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; - Die Kernbibliothek von Qt&lt;/li&gt;&lt;li&gt;Qt5Gui.dll &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; - Die GUI Bibliothek von Qt&lt;/li&gt;&lt;li&gt;Qt5Widgets.dll &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - Die Widgets Bibliothek von Qt &lt;/li&gt;&lt;/ul&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; platforms - Dieses Verzeichnis und der Inhalt ist wichtig sonst läuft nichts!&lt;br /&gt;&lt;ul&gt;&lt;li&gt;qtwindows.dll&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Das ist die Plattform dll für Windows&amp;nbsp;&amp;nbsp; &lt;/li&gt;&lt;/ul&gt;Mein Projekt soll zusätzlich eine SQL-Datenbank nutzen. Deswegen ist noch ein weiteres Verzeichnis und sind auch zwei zusätzliche Bibliotheken in dem Projekt enthalten:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Qt5Sql.dll&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Die Qt Sql Bibliothek&lt;/li&gt;&lt;/ul&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; sqldrivers - Dieses Verzeichnis enthält die eigentliche Datenbank Bibliothek.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;qsqlite.dll &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - Für die SQLite Datenbank&lt;/li&gt;&lt;/ul&gt;Es ist wichtig alle Qt-Bibliotheken aus dem Verzeichnis &amp;lt;QtDir&amp;gt;\mingw48_32\bin zu holen. Ich benutze für Windows den Inno Setup Installer und habe das Script so gestaltet dass die benötigten &quot;dll&#39;s&quot; direkt von hier in den Setup kopiert werden. Für die VisualStudio Umgebung sind die lib*-Dateien nicht notwendig. Anstelle dieser Dateien werden die MSVCP&amp;lt;xx&amp;gt;.dll und MSVCR&amp;lt;xx&amp;gt;.dll Dateien benötigt. Anstelle der &amp;lt;xx&amp;gt; steht selbstverständlich die richtige Versionsnummer. Das sollte für VisualStudio 2010 die Versionsnummer 100 sein.&lt;br /&gt;&lt;br /&gt;Die anderen Dateien, die in der Bildschirmkopie zu sehen sind, sind für den Installer. Außer die&amp;nbsp; &quot;bde.db&quot; Datei. Das ist die Datenbank.</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/7211724178314851061/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2013/09/qt5-windows-programme-veroffentlichen.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/7211724178314851061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/7211724178314851061'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2013/09/qt5-windows-programme-veroffentlichen.html' title='Qt5 Windows Programme veröffentlichen'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-7552959922114490488</id><published>2013-07-06T21:35:00.000+02:00</published><updated>2013-07-06T21:35:04.240+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cd"/><category scheme="http://www.blogger.com/atom/ns#" term="DMG"/><category scheme="http://www.blogger.com/atom/ns#" term="Festplattendienstprogramm"/><category scheme="http://www.blogger.com/atom/ns#" term="hdiutil"/><category scheme="http://www.blogger.com/atom/ns#" term="Installation"/><category scheme="http://www.blogger.com/atom/ns#" term="Installationspakte"/><category scheme="http://www.blogger.com/atom/ns#" term="ln"/><category scheme="http://www.blogger.com/atom/ns#" term="ls"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="OS X"/><category scheme="http://www.blogger.com/atom/ns#" term="Pakete"/><category scheme="http://www.blogger.com/atom/ns#" term="Xcode"/><category scheme="http://www.blogger.com/atom/ns#" term="xcodebuild"/><title type='text'>OS X Installationspakete erzeugen</title><content type='html'>Für Anwender ist es immer angenehmer ein Installationspaket zu haben. Das ist immer ein besseres Gefühl als irgendetwas irgendwohin zu kopieren.&lt;br /&gt;&lt;br /&gt;Üblicherweise werden die Programme für den Mac als DMG angeboten. In diesen Disk Images sind dann die APPS versteckt. Die Installation des Programms ist dann auch ganz einfach. Mit der linken Maustaste das Programm-Icon packen und über dem Programm Ordner loslassen. Dadurch wird die Anwendung in das Programmverzeichnis kopiert und kann dort ab sofort gestartet werden. In vielen der DMG&#39;s ist zusätzlich zu den Programmen auch eine Verknüpfung zu dem Programm-Verzeichnis vorhanden.&lt;br /&gt;&lt;br /&gt;Wenn man selbst Programme schreibt muss man also einfach ein Disk Image erzeugen und kann dieses zum Download zur Verfügung stellen. Das ist recht einfach.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Hier die Anleitung&lt;/h2&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Ein Diskimage erstellen.&lt;/b&gt;&lt;br /&gt;Das kann am einfachsten mit dem GUI-Tool &quot;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Festplattendienstprogramm&lt;/span&gt;&quot; aus dem Ordner &quot;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Dienstprogramme&lt;/span&gt;&quot; bewerkstelligt werden.&lt;br /&gt;Einfach dieses Programm starten und aus der Toolbar &quot;Neues Image&quot; wählen...&lt;br /&gt;Alternativ kann das Image auch mit dem Kommandozeilenwerkzeug &quot;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;a href=&quot;http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/hdiutil.1.html&quot; target=&quot;_blank&quot;&gt;hdiutil&lt;/a&gt;&lt;/span&gt;&quot; erzeugt werden. Im dem geöffnetem Terminal erzeugt der Befehl &quot;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;hdiutil create -size 10m /tmp/tmp.dmg -ov -fs HFS+&lt;/span&gt;&quot; ein neues Image mit dem Namen &quot;tmp.dmg&quot; in dem &quot;/tmp&quot; Ordner. Die maximale Größe ist in diesem Beispiel 10MB.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Das Image mounten (anklicken)&lt;/b&gt;&lt;br /&gt;Das klingt kompliziert ist aber einfach. Ich hier davon aus das Image ist in dem &quot;/tmp&quot; Ordner. Im Finder mit &quot;Gehe zu&quot; in den &quot;/tmp&quot; Ordner wechseln und mit einem Doppelklick das Diskimage öffnen. Dadurch wird das Laufwerkssymbol auf dem Desktop angezeigt und lässt sich in dem Finder Fenster direkt anwählen.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Mit Xcode ein install generieren lassen.&lt;/b&gt;&lt;br /&gt;XCode hat auch ein Kommandozeilenwerkzeug. Dieses wird jetzt benötigt. Mit &quot;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;a href=&quot;https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html&quot; target=&quot;_blank&quot;&gt;xcodebuild&lt;/a&gt;&lt;/span&gt;&quot; erzeugen wir jetzt ein zur Installation vorgesehene Version unseres Projektes. Dafür brauchen wir das Terminal und müssen in das Verzeichnis wechseln in dem unser Projekt zu Hause ist. Mit dem Befehl &quot;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;xcodebuild clean install&lt;/span&gt;&quot; räumen wir zuerst auf, danach wir ein neues komplettes Build durchgeführt. Das Ergebnis landet aber diesesmal nicht in den tiefen des Library-Verzeichnisses sondern in &quot;/tmp&quot;. Da sind wir bereits im Finder. Durch den Aufruf von xcodebuild wurde hier ein neues Verzeichnis erzeugt. Dieses Verzeichnis trägt den Namen des Projekts mit dem Anhang &quot;.dst&quot;. In diesem Verzeichnis finden wir unsere für den nächsten Schritt benötigten Dateien.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Das Programm in das Image kopieren.&lt;/b&gt;&lt;br /&gt;In dem oben genannten Verzeichnis existiert ein Unterordner. Dieser hat den nicht sehr überraschenden Namen &quot;Applications&quot;. Alles was hier zu finden ist muss in das neue Diskimage kopiert werden. Zusätzlich könnten hierher noch eine Versionshistorie und die Lizenzinformationen landen.&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Einen symbolischen Link auf das Programmverzeichnis generieren.&lt;/b&gt;&lt;br /&gt;Da wir die Vorgänge für unsere Anwender so einfach wie möglich gestalten wollen stellen wir noch einen Link zu dem Anwendungen Verzeichnis zur Verfügung. Jetzt kommen wir aber ohne die &amp;nbsp;Kommandozeile nicht mehr weiter. Zuerst müssen wir in das Diskimage wechseln. Da funktioniert über den Befehl &quot;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;a href=&quot;http://unixhelp.ed.ac.uk/CGI/man-cgi?cd&quot; target=&quot;_blank&quot;&gt;cd&lt;/a&gt; /Volumes/&amp;lt;Name des Laufwerks&amp;gt;&lt;/span&gt;&quot;. Da wir keinen Namen vergeben hatten lautet dieser bei uns &quot;untitled&quot;. Jetzt könnten wir kurz und knackig den symbolischen Link erzeugen. Dafür geben wir in die Befehlszeile: &quot;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;a href=&quot;http://unixhelp.ed.ac.uk/CGI/man-cgi?ln&quot; target=&quot;_blank&quot;&gt;ln&lt;/a&gt; -s /Applications Applications&lt;/span&gt;&quot; ein.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Kopieren ins Projektverzeichnis&lt;/b&gt;&lt;br /&gt;Alles was in dem Verzeichnis &quot;/tmp&quot; steht lebt nur bis zum nächsten Reboot. Deswegen müssen wir unser neues Werk als letzten Schritt noch in das Projektverzeichnis oder anders Verzeichnis unserer Wahl kopieren.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Abschluß&lt;/b&gt;&lt;br /&gt;Das war alles. Jetzt haben wir ein fertiges professionell aussehenden Paket zur Installation unseres Programms erzeugt. Dieses Paket können wir schön verbreiten.&lt;/li&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/7552959922114490488/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2013/07/os-x-installationspakete-erzeugen.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/7552959922114490488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/7552959922114490488'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2013/07/os-x-installationspakete-erzeugen.html' title='OS X Installationspakete erzeugen'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-4294456150425722206</id><published>2013-01-13T16:32:00.001+01:00</published><updated>2013-01-13T16:32:57.865+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ibtool"/><category scheme="http://www.blogger.com/atom/ns#" term="Lokalisierung"/><category scheme="http://www.blogger.com/atom/ns#" term="Objective-C"/><category scheme="http://www.blogger.com/atom/ns#" term="OS X"/><category scheme="http://www.blogger.com/atom/ns#" term="Xcode"/><category scheme="http://www.blogger.com/atom/ns#" term="XIB"/><title type='text'>OS X Software internationalisieren </title><content type='html'>Die Sprache der Computer und Programmentwicklung ist englisch. Das wirft dann die Frage auf wie bekomme ich mein anständig auf englisch entwickeltes Programm dazu deutsche Texte zu verwenden. Das sollte selbstverständlich mit geringem Aufwand zu bewerkstelligen sein. Das am besten mit den vorhandenen Bordmitteln.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Lösung&lt;/h3&gt;&lt;div&gt;In der NS (NS steht für NextStep) Bibliothek wird ein Makro zur Verfügung gestellt. Mit der Hilfe dieses Makro&#39;s können die bereitgestellten Texte durch die der nativen Sprache ersetzt werden. Da das &lt;a href=&quot;https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/ObjC_classic/_index.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Foundation Framework&lt;/a&gt;&amp;nbsp;sehr umfangreich ist wird das Makro in verschiedenen Ausprägungen zur Verfügung gestellt. Die Standard Version ist NSLocalizedString. Mit dieser Version wird anstelle des normalen Textes ein Platzhalter angegeben. Über diesen Platzhalter wird dann der auszugebende Text geholt.&lt;br /&gt;&lt;br /&gt;Das Makro &quot;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;NSLocalizedString(@&quot;Message&quot;,&amp;nbsp;@&quot;Comment&quot;)&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;würde &amp;nbsp;den Text &quot;&lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&quot; ausgeben. Wenn allerdings eine Internationalisierungsdatei vorhanden wäre, würde der Text &quot;&lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&quot; durch die jeweilige Anpassung ersetzt. Wäre also eine Datei &quot;de.lproj&quot; an der richtigen Stelle vorhanden könnte die Ausgabe &quot;&lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Nachricht&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&quot; lauten.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;In der Datei &quot;de.lproj&quot; muss dafür die Zeile &lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Message=Nachricht&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; stehen. Wogegen in der original englischen Datei &quot;en.lproj&quot; die Zeile &lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Tag=Message&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; steht.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;h2&gt;Xcode&lt;/h2&gt;&lt;br /&gt;Voraussetzung für die Lokalisierung eines Projekts ist die Erweiterung des Projekts in &lt;a href=&quot;https://developer.apple.com/technologies/tools/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Xcode&lt;/a&gt;-Projekts. Es muss zu der immer vorhandenen englischen Sprachanpassung die neue Sprache hinzugefügt werden. Das wird in der Projektansicht von &lt;a href=&quot;https://developer.apple.com/technologies/tools/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Xcode&lt;/a&gt; erledigt.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-Q904N-7hgCY/UPLL3MlLuQI/AAAAAAAABoI/uC382D_4jn0/s1600/13.01.13_15_43-Bildschirmkopie.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-Q904N-7hgCY/UPLL3MlLuQI/AAAAAAAABoI/uC382D_4jn0/s1600/13.01.13_15_43-Bildschirmkopie.png&quot; height=&quot;190&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Nach dem der Plus-Knopf angeklickt wurde zeigt &lt;a href=&quot;https://developer.apple.com/technologies/tools/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Xcode&lt;/a&gt; die möglichen Dateien die lokalisiert werden können an. Wenn zuviel oder unnötige Dateien angezeigt werden kann durch Deselektierung &amp;nbsp;in diesem Dialog die jeweilige Datei ausgespart werden.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/--H4IE1z1YO8/UPLNMrADoPI/AAAAAAAABoY/K8wMSmz3gUU/s1600/13.01.13_16_01-Bildschirmkopie.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/--H4IE1z1YO8/UPLNMrADoPI/AAAAAAAABoY/K8wMSmz3gUU/s1600/13.01.13_16_01-Bildschirmkopie.png&quot; height=&quot;81&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Die zuvor angebotenen Dateien stehen ab sofort in dem Projekt zu Lokalisierung bereit. In dem linkem Fenster wir dies durch das kleine Dreieck angezeigt. Ein Klick darauf klappt die Dateien auf und zeigt die möglichen Übersetzungen.&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-2cssAzsD0dI/UPLPBV0a-1I/AAAAAAAABow/P_yPAr2lzGI/s1600/13.01.13_16_08-Bildschirmkopie.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-2cssAzsD0dI/UPLPBV0a-1I/AAAAAAAABow/P_yPAr2lzGI/s1600/13.01.13_16_08-Bildschirmkopie.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Bei den einfachen Textdateien ist nun die Übersetzung problemlos möglich.&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;Sonderfall XIB&lt;/h3&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Die &lt;a href=&quot;http://de.wikipedia.org/wiki/Interface_Builder&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;XIB-Dateien&lt;/a&gt; erfordern &amp;nbsp;eine großen Aufwand. So ist hier keine direkte Übersetzung möglich. Es besteht die Möglichkeit die Benutzeroberfläche komplett in der neuen Sprache zu erstellen. Doch dieser große Aufwand ist in der Regel nur bei kleinen bis sehr kleinen Projekten zu vertreten. In der Regel machen Programmieren genauso ungern Übersetzungen wie Dokumentationen. So ist davon auszugehen das dieser Weg im wirklichen Leben nie beschritten wird.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Von &lt;a href=&quot;http://www.apple.com/de/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Apple&lt;/a&gt; wird ein Kommandozeilen Werkzeug zur Verfügung gestellt. Dieses Programm extrahiert die zu übersetzenden Zeichenkette aus der &lt;a href=&quot;http://de.wikipedia.org/wiki/Interface_Builder&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;XIB Datei&lt;/a&gt;. Die so gewonnen Zwischendateien können gut Übersetzt werden. Auch hier ist etwas Aufwand nötig.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/4294456150425722206/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2013/01/os-x-software-internationalisieren.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/4294456150425722206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/4294456150425722206'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2013/01/os-x-software-internationalisieren.html' title='OS X Software internationalisieren '/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-Q904N-7hgCY/UPLL3MlLuQI/AAAAAAAABoI/uC382D_4jn0/s72-c/13.01.13_15_43-Bildschirmkopie.png" height="72" width="72"/><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-2043665109411890043</id><published>2012-11-17T16:24:00.001+01:00</published><updated>2012-11-17T16:24:38.668+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CMake"/><category scheme="http://www.blogger.com/atom/ns#" term="DEB"/><category scheme="http://www.blogger.com/atom/ns#" term="DMG"/><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="NSIS"/><category scheme="http://www.blogger.com/atom/ns#" term="Opensource"/><category scheme="http://www.blogger.com/atom/ns#" term="OS X"/><category scheme="http://www.blogger.com/atom/ns#" term="RPM"/><category scheme="http://www.blogger.com/atom/ns#" term="TGZ"/><category scheme="http://www.blogger.com/atom/ns#" term="Xcode"/><category scheme="http://www.blogger.com/atom/ns#" term="ZIP"/><title type='text'>CMake und OS X</title><content type='html'>&lt;a href=&quot;http://www.cmake.org/&quot; target=&quot;_blank&quot;&gt;CMake&lt;/a&gt; ist ein sehr nützliches Werkzeug. Mit diesem Tool wird die Entwicklung von Programmen sehr erleichtert.&lt;br /&gt;Dieses Werkzeug wird von &lt;a href=&quot;http://www.kitware.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Kitware&lt;/a&gt; als Opensource vertrieben und steht über diese Adresse &amp;nbsp;&lt;a href=&quot;http://www.cmake.org/cmake/resources/software.html&quot;&gt;http://www.cmake.org/cmake/resources/software.html&lt;/a&gt;&amp;nbsp;zum Download bereit. Ursprünglich kommt das Werkzeug aus der Linux-Ecke. Allerdings steht es auch für Windows und für den &lt;a href=&quot;http://www.apple.com/de/osx/&quot; target=&quot;_blank&quot;&gt;OS X&lt;/a&gt; zur Verfügung. Wobei &lt;a href=&quot;http://www.apple.com/de/osx/&quot; target=&quot;_blank&quot;&gt;Mac OS X&lt;/a&gt; der interessante Teil für mich ist.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Installation&lt;/h2&gt;&lt;div&gt;Nach dem Download steht auf dem Mac ein DMG in dem Download Ordner bereit. Nach dem dieses Disk-Image durch einen Doppelklick geöffnet wurde kann man es einfach installieren. Bei der Installation wird angeboten einen symbolischen Link für die Kommando-Zeile zur Verfügung zu stellen. Das macht absolut Sinn. Außer man ist geneigt für jeden Kommandozeilen Aufruf richtig viel zu tippen. Die Eingabe würde ohne den symbolischen Link auch den kompletten Pfad, einschließlich den Pfad in der App erfordern.&lt;/div&gt;&lt;h2&gt;Nutzung&lt;/h2&gt;&lt;div&gt;Am leichtesten lässt sich &lt;a href=&quot;http://www.cmake.org/&quot; target=&quot;_blank&quot;&gt;CMake&lt;/a&gt; mit der Hilfe des mitgelieferten GUI-Tools nutzen. Damit ist schnell und einfach die notwendige Datei CListMake.txt zu erzeugen. Diese Datei ist notwendig um das Makefile zu generieren. So lassen sich mit ein paar einfachen leicht zu verstehenden Befehlen komplizierte Projekte erstellen. Das geht sogar so weit dass ein Zusatzmodul dabei ist mit dem sich die Paketskript erzeugen lassen. Also kann man aus der CListMake.txt Datei erzeugte Programme gleich in die folgenden Pakete zusammenpacken:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;TGZ&lt;/li&gt;&lt;li&gt;STGZ&lt;/li&gt;&lt;li&gt;TBZ2&lt;/li&gt;&lt;li&gt;TZ&lt;/li&gt;&lt;li&gt;ZIP&lt;/li&gt;&lt;li&gt;NSIS&lt;/li&gt;&lt;li&gt;DragNDrop (OSX)&lt;/li&gt;&lt;li&gt;PackageMaker (OSX)&lt;/li&gt;&lt;li&gt;OSXX1 (OSX)&lt;/li&gt;&lt;li&gt;Bundle (OSX)&lt;/li&gt;&lt;li&gt;CygwinBinary und CygwinSource&lt;/li&gt;&lt;li&gt;DEB (Linux)&lt;/li&gt;&lt;li&gt;RPM (Linux)&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Ich gebe zu das ist sehr beeindruckend. Allerdings werde ich trotzdem nicht damit arbeiten. Warum ist im nächsten Abschnitt zu lesen.&lt;/div&gt;&lt;h2&gt;Fazit&lt;/h2&gt;&lt;div&gt;Nach dem die &quot;großen&quot; &lt;a href=&quot;http://de.wikipedia.org/wiki/Qt_Creator&quot; target=&quot;_blank&quot;&gt;Qt&lt;/a&gt; und Xcode&lt;a href=&quot;https://developer.apple.com/xcode/&quot; target=&quot;_blank&quot;&gt;https://developer.apple.com/xcode/&lt;/a&gt; ein durchdachtes Konzept für die&lt;a href=&quot;http://de.wikipedia.org/wiki/Integrierte_Entwicklungsumgebung&quot; target=&quot;_blank&quot;&gt; IDE&#39;s&lt;/a&gt; zur Programm Kompilierung eingesetzt haben macht &lt;a href=&quot;http://www.cmake.org/&quot; target=&quot;_blank&quot;&gt;CMake&lt;/a&gt; nicht mehr richtig Sinn. In der Umgebung in der ich arbeite schon einmal gar nicht. &lt;a href=&quot;http://www.cmake.org/&quot; target=&quot;_blank&quot;&gt;CMake&lt;/a&gt; macht hier aus einem &quot;freien&quot; Projekt ein Xcode Projekt. Da kann man sein Projekt doch gleich in der richtigen Umgebung starten. Ich glaube es würde niemand auf die Idee kommen sein Projekt frei aufzusetzen. Zumal die aktuellen Projekte, die mit GUI, sehr aufwändig sind.&amp;nbsp;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/2043665109411890043/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2012/11/cmake-und-os-x.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/2043665109411890043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/2043665109411890043'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2012/11/cmake-und-os-x.html' title='CMake und OS X'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-5000165713379039104</id><published>2012-03-28T19:52:00.001+02:00</published><updated>2012-04-04T22:44:55.097+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C"/><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="doxygen"/><category scheme="http://www.blogger.com/atom/ns#" term="headerdoc2html"/><category scheme="http://www.blogger.com/atom/ns#" term="JAVA"/><category scheme="http://www.blogger.com/atom/ns#" term="javadoc"/><category scheme="http://www.blogger.com/atom/ns#" term="JDK"/><category scheme="http://www.blogger.com/atom/ns#" term="Objective-C"/><category scheme="http://www.blogger.com/atom/ns#" term="Opensource"/><title type='text'>Quelldateien kommentieren</title><content type='html'>Das ist von mir und auch wohl von den meisten anderen die sich mit der Programmierung von Software beschäftigen ein sehr ungeliebtes Thema. Neuere IDE&#39;s und Framework bieten aber hier Werkzeuge an die das Thema etwas ansprechender machen.&lt;br /&gt;&lt;h2&gt;JAVA&lt;/h2&gt;Mit dem &lt;a href=&quot;http://de.wikipedia.org/wiki/Java_Development_Kit&quot; target=&quot;_blank&quot;&gt;JDK&lt;/a&gt;wurde es populär. Man kann den Quelltext des Programms kommentieren. Wenn man das schön macht und sich an die Vorgaben hält bekommt man eine ansprechende Dokumentation. Das im &lt;a href=&quot;http://de.wikipedia.org/wiki/Java_Development_Kit&quot; target=&quot;_blank&quot;&gt;JDK&lt;/a&gt;enthaltene  Werkzeugs &lt;a href=&quot;http://de.wikipedia.org/wiki/Javadoc&quot; target=&quot;_blank&quot;&gt;javadoc&lt;/a&gt; erstellt aus den Tags ein Paket von HTML-Dokumente.  In der Regeln steuert man das über die Kommandozeile. Das ganze kann man auch um einiges komfortabler mit Netbeans anstelle des direkten Aufrufs von javadoc über die Kommandozeile erreichen. &lt;a href=&quot;http://de.wikipedia.org/wiki/Javadoc&quot; target=&quot;_blank&quot;&gt;javadoc&lt;/a&gt;erstellte die Dokumentation für den kompletten Quelltext Ordner. Außerdem kann man selbstverständlich auch externe Verweise einbinden. So ist es möglich auch Verweise auf Systembibliotheken einzubinden.&lt;br /&gt;&lt;h2&gt;Objective-C (Apple)&lt;/h2&gt;&lt;a href=&quot;http://www.apple.com/de/&quot; target=&quot;_blank&quot;&gt;Apple&lt;/a&gt;stellt im Bereich der &lt;a href=&quot;http://de.wikipedia.org/wiki/Open_Source&quot; target=&quot;_blank&quot;&gt;Opensource&lt;/a&gt;Software auch ein Werkzeug zur Bildung einer Quelltext Dokumentation zur Verfügung. Das in &lt;a href=&quot;http://de.wikipedia.org/wiki/Perl_(Programmiersprache)&quot; target=&quot;_blank&quot;&gt;Perl&lt;/a&gt;geschriebene Werkzeug &lt;a href=&quot;https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/HeaderDoc/intro/intro.html&quot; target=&quot;_blank&quot;&gt;headerdoc2html&lt;/a&gt;wird unter der &lt;a href=&quot;http://de.wikipedia.org/wiki/BSD-Lizenz&quot; target=&quot;_blank&quot;&gt;BSD-Lizenz&lt;/a&gt;zur Verfügung gestellt. Sie können es separat herunterladen. Wer allerdings &lt;a href=&quot;http://de.wikipedia.org/wiki/Xcode&quot; target=&quot;_blank&quot;&gt;Xcode&lt;/a&gt;installiert hat es automatisch mit installiert. Im Gegensatz zu den beiden zuerst beschriebenen Hilfsprogrammen kann &lt;a href=&quot;https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/HeaderDoc/intro/intro.html&quot; target=&quot;_blank&quot;&gt;headerdoc2html&lt;/a&gt;auch andere Dialekte.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/AppleScript&quot; target=&quot;_blank&quot;&gt;AppleScript&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bourne_shell&quot; target=&quot;_blank&quot;&gt;Bourne Shell&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/C_(Programmiersprache)&quot; target=&quot;_blank&quot;&gt;C&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/C++&quot; target=&quot;_blank&quot;&gt;C++&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/C_shell&quot; target=&quot;_blank&quot;&gt;C Shell&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Java_(Programmiersprache)&quot; target=&quot;_blank&quot;&gt;Java&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/JavaScript&quot; target=&quot;_blank&quot;&gt;Java Script&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.gnu.org/software/hurd/microkernel/mach/mig.html&quot; target=&quot;_blank&quot;&gt;Mach MIG&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Objective-C&quot; target=&quot;_blank&quot;&gt;Objectiv C&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Pascal_(Programmiersprache)&quot; target=&quot;_blank&quot;&gt;Pascal&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Perl_(Programmiersprache)&quot; target=&quot;_blank&quot;&gt;Perl&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Python_(Programmiersprache)&quot; target=&quot;_parent&quot;&gt;Python&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/PHP&quot; target=&quot;_blank&quot;&gt;PHP&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Ruby_(Programmiersprache)&quot; target=&quot;_blank&quot;&gt;Ruby&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Tcl&quot; target=&quot;_blank&quot;&gt;Tcl&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Sie müssen sich logischer Weise an den Syntax der Dokumentations-Tags halten und schon erhalten sie eine schöne Dokumentation. Leider hat das Apple-Tool einen gravierenden Nachteil, es erzeugt zwar für jedes Modul eine schönen Datei, aber keine Zentrale HTML-Datei aus der sich alle Module ansprechen lassen. Hierfür gibt es ein zusätzliches Werkzeug: &lt;a href=&quot;https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/HeaderDoc/intro/intro.html&quot; target=&quot;_blank&quot;&gt;gatherheaderdoc&lt;/a&gt;das ein Zentraldokument erzeugt. Die dafür bereitgestellt CSS-Datei und die Vorlage ist aber so schwach dass es sich wirklich nicht lohnt sich mit diesen Werkzeug intensiv auseinanderzusetzen. In dem Paket ist zusätzlich ein Programm enthalten mit dem sie Man-Pages für ihre Programme erstellen können. Hier müssen dann natürlich spezielle Tags verwendet werden.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Doxygen&lt;/h2&gt;Mein Favorit ist &lt;a href=&quot;http://de.wikipedia.org/wiki/Doxygen&quot; target=&quot;_blank&quot;&gt;Doxygen&lt;/a&gt;.&lt;br /&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Doxygen&quot; target=&quot;_blank&quot;&gt;Doxygen&lt;/a&gt;kann fast soviel Quellen wie das Apple-Tool:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/C_(Programmiersprache)&quot; target=&quot;_blank&quot;&gt;C&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/C++&quot; target=&quot;_blank&quot;&gt;C++&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Java_(Programmiersprache)&quot; target=&quot;_blank&quot;&gt;Java&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Objective-C&quot; target=&quot;_blank&quot;&gt;Ojective-C&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Python_(Programmiersprache)&quot; target=&quot;_blank&quot;&gt;Python&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Schnittstellenbeschreibungssprache&quot; target=&quot;_blank&quot;&gt;IDL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Fortran&quot; target=&quot;_blank&quot;&gt;Fortran&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/Very_High_Speed_Integrated_Circuit_Hardware_Description_Language&quot; target=&quot;_blank&quot;&gt;VHDL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/PHP&quot; target=&quot;_blank&quot;&gt;PHP&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://de.wikipedia.org/wiki/C-Sharp&quot; target=&quot;_blank&quot;&gt;C#&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Der Syntax von &lt;a href=&quot;https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/HeaderDoc/intro/intro.html&quot; target=&quot;_blank&quot;&gt;headerdoc2html&lt;/a&gt;ist an &lt;a href=&quot;http://de.wikipedia.org/wiki/Doxygen&quot; target=&quot;_blank&quot;&gt;Doxygen&lt;/a&gt;angelehnt. Also wenn sie ihren Code so kommentieren dass &lt;a href=&quot;https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/HeaderDoc/intro/intro.html&quot; target=&quot;_blank&quot;&gt;headerdoc2html&lt;/a&gt;eine gute Ausgabe erzeugt so wird diese auch mit &lt;a href=&quot;http://de.wikipedia.org/wiki/Doxygen&quot; target=&quot;_blank&quot;&gt;Doxygen&lt;/a&gt;gut aussehen.&lt;br /&gt;Aber &lt;a href=&quot;http://de.wikipedia.org/wiki/Doxygen&quot; target=&quot;_blank&quot;&gt;Doxygen&lt;/a&gt;kann etwas was das Apple-Tool nicht oder nur schlecht kann. Es wird wie bei &lt;a href=&quot;http://de.wikipedia.org/wiki/Javadoc&quot; target=&quot;_blank&quot;&gt;javadoc&lt;/a&gt;ein Zentraldokument erzeugt. Aus diesem Dokument können sie dann alle Module des Projekts erreichen.&lt;br /&gt;Außerdem bietet dieses Werkzeug noch mehr Ausgabemöglichkeiten. Es können neben den üblichen &lt;a href=&quot;http://de.wikipedia.org/wiki/Hypertext_Markup_Language&quot; target=&quot;_blank&quot;&gt;HTML&lt;/a&gt;-Dokumenten auch &lt;a href=&quot;http://de.wikipedia.org/wiki/LaTeX&quot; target=&quot;_blank&quot;&gt;LaTeX&lt;/a&gt;, &lt;a href=&quot;http://de.wikipedia.org/wiki/Rich_Text_Format&quot; target=&quot;_blank&quot;&gt;RTF&lt;/a&gt;, &lt;a href=&quot;http://de.wikipedia.org/wiki/PostScript&quot; target=&quot;_parent&quot;&gt;Postscript&lt;/a&gt;, &lt;a href=&quot;http://de.wikipedia.org/wiki/Portable_Document_Format&quot; target=&quot;_blank&quot;&gt;PDF&lt;/a&gt;und MAN-Dateien erzeugt werden. Als i-Tüpfelchen besteht die Möglichkeit ein Klassendiagramm zu erzeugen. Um dieses Diagramm anzuzeigen muss das &lt;a href=&quot;http://de.wikipedia.org/wiki/Graphviz&quot; target=&quot;_blank&quot;&gt;GraphViz&lt;/a&gt;Paket installiert sein.</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/5000165713379039104/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2012/03/quelldateien-kommentieren.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/5000165713379039104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/5000165713379039104'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2012/03/quelldateien-kommentieren.html' title='Quelldateien kommentieren'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-8339485674423580276</id><published>2012-03-20T19:37:00.001+01:00</published><updated>2012-03-21T19:45:24.741+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="GTK"/><category scheme="http://www.blogger.com/atom/ns#" term="IDE"/><category scheme="http://www.blogger.com/atom/ns#" term="JAVA"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="mono"/><category scheme="http://www.blogger.com/atom/ns#" term="monodevelop"/><category scheme="http://www.blogger.com/atom/ns#" term="OS X"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><title type='text'>Zurück bei QT und Java</title><content type='html'>Nachdem ich jetzt einen enthusiastischen Ausflug und Versuch mit MONO gemacht hatte trat die Realität wieder ein.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;MONO&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Microsoft hatte ein gutes Projekt gestartet. Die .NET-Welt ist gut und einen gesunde Weiterentwicklung von JAVA und C++. Ich mag Microsoft nicht, trotzdem das haben die gut angefangen. &lt;a href=&quot;http://de.wikipedia.org/wiki/Miguel_de_Icaza&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;&quot; title=&quot;Miguel de Icaza&quot;&gt;Miguel de Icaza&lt;/a&gt;&amp;nbsp;hatte dann die Idee dieses Framework der Opensource Welt zu bringen. Daraus ist MONO geworden noch besser.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Die Probleme&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Ich ging eigentlich davon aus, man entwickelt ein Programm, versendet das Komplilat und das Ding läuft. So ist es bei JAVA. Bei MONO und .NET ist es nur annähernd so. MONO wurde auf der Basis von Linux und GTK entwickelt und .NET von Microsoft. Die Programmierer von Microsoft können dabei wohl genauso wenig aus ihrer Haupt wie die Opensource Gemeinde. Man muss also vorher wissen wohin der Weg gehen soll.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Der Test&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Ich bin Mac-Besitzer und Nutzer. Um auch etwas für diesen tollen Computer machen zu können habe ich mir Programmier-Bücher zugelegt. Aus dem Buch &quot;Einstieg in Objektive-C 2.0 und Cocoa&quot; von Kai Surendorf programmiere ich das Beispiel Projekt &quot;WebLogClient&quot; nach. Dabei kam ich auf die Idee, ich könnte versuchen zusätzlich das native OS X Projekt in einer portablen oder mehrere Plattformen unterstützenden Umgebung zusätzlich zu realisieren. Das habe ich dann auch so umgesetzt. Mit MONO, Qt und JAVA.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Qt ist Klasse. Toll integriert allerdings muss das Projekt für jede Plattform neu gebaut werden. Mein Favorit.&lt;/li&gt;&lt;li&gt;JAVA ist Java. Läuft überall. Sieht auch überall ein wenig fremd aus.&lt;/li&gt;&lt;li&gt;MONO Läuft auch überall. Sieht genauso fremd aus wie JAVA. Ist schlechter integriert außer bei Linux.&lt;/li&gt;&lt;/ul&gt;QT-Programme sehen beim Mac so aus wie Mac Programme aussehen sollten und fühlen sich auch so an. Allerdings sind diese Applikationen nicht binär kompatibel. Java mit Swing baut man einmal. Dann die JAR auf die andere Plattform und läuft. Ähnlich ist es mit MONO. Allerdings habe ich mich von MONO verabschiedet. Das Framework ist nicht so gut. Das hat sich bei der Umsetzung des Projekts WebLogClient gezeigt. Wo ich mit Qt und Java einfach die Voreinstlellungen des Programms lesen und schreiben konnte ging bei Mono hier gar nichts.&lt;br /&gt;Ich habe das Internet durchsucht und hier zwar etwas gefunden das aber nur in der Windows Welt funktioniert und nicht mit MONO. Bei MONO muss man sich selbst etwas bauen...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Fazit&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Gut ich habe einfach keine Lust mehr auf MONO. Selbstverständliche Funktionen wie das Speichern von &amp;nbsp;Einstellungen sollte vorhanden sein. Ich habe keine Lust hier etwas zu programmieren. Für die entsprechende Plattform müsste ich auch suchen wo die Benutzer- oder Systemeinstellungen gespeichert werden. Deswegen willkommen zurück Qt und JAVA&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/8339485674423580276/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2012/03/zuruck-bei-qt-und-java.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/8339485674423580276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/8339485674423580276'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2012/03/zuruck-bei-qt-und-java.html' title='Zurück bei QT und Java'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-1358588652549043019</id><published>2012-03-03T23:39:00.000+01:00</published><updated>2012-04-10T20:00:04.853+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="CMD"/><category scheme="http://www.blogger.com/atom/ns#" term="GTK"/><category scheme="http://www.blogger.com/atom/ns#" term="IDE"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="mono"/><category scheme="http://www.blogger.com/atom/ns#" term="monodevelop"/><category scheme="http://www.blogger.com/atom/ns#" term="OS X"/><category scheme="http://www.blogger.com/atom/ns#" term="SDK"/><category scheme="http://www.blogger.com/atom/ns#" term="VBS"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Mono die ersten Schritte</title><content type='html'>Da ich bereits eine paar Erfahrungen in &lt;a href=&quot;http://www.oracle.com/technetwork/java/index.html&quot; target=&quot;_blank&quot;&gt;Java&lt;/a&gt; gesammelt hatte dachte ich eigentlich &lt;a href=&quot;http://www.mono-project.com/Main_Page&quot; target=&quot;_blank&quot;&gt;Mono&lt;/a&gt; sollte kein Problem darstellen. Doch das ist weit gefehlt. Da besteht doch ein weiter unterschied. Das sehr verschiedene Dialekte.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE&#39;s&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Die Standard &lt;a href=&quot;http://de.wikipedia.org/wiki/Integrierte_Entwicklungsumgebung&quot; target=&quot;_blank&quot;&gt;IDE&lt;/a&gt; für &lt;a href=&quot;http://www.mono-project.com/Main_Page&quot; target=&quot;_blank&quot;&gt;Mono&lt;/a&gt; ist im &lt;a href=&quot;http://de.wikipedia.org/wiki/Linux&quot; target=&quot;_blank&quot;&gt;Linux&lt;/a&gt; und &lt;a href=&quot;http://de.wikipedia.org/wiki/Apple_Macintosh&quot; target=&quot;_blank&quot;&gt;Mac&lt;/a&gt; Umfeld &lt;a href=&quot;http://monodevelop.com/&quot; target=&quot;_blank&quot;&gt;MonoDevelop&lt;/a&gt;. Es gibt diese IDE auch für &lt;a href=&quot;http://de.wikipedia.org/wiki/Windows&quot; target=&quot;_blank&quot;&gt;Windows&lt;/a&gt;. Trotzdem gehe ich davon aus dass für Windows &lt;a href=&quot;http://www.icsharpcode.net/OpenSource/SD/Default.aspx&quot; target=&quot;_blank&quot;&gt;SharpDevelop&lt;/a&gt; der Standard ist. Das ist aber bei Windows nicht eindeutig festzulegen weil Microsoft die ganze .NET Welt erschaffen hat. Selbstverständlich wird von &lt;a href=&quot;http://www.microsoft.com/de-de/default.aspx&quot; target=&quot;_blank&quot;&gt;Microsoft&lt;/a&gt; hier auch eine IDE angeboten. &lt;a href=&quot;http://www.microsoft.com/germany/visualstudio/&quot; target=&quot;_blank&quot;&gt;VisualStudio&lt;/a&gt; gibt es in einer freien hier &quot;Express&quot; genannten Version und zu kaufen.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Monodevelop&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Im Windows Umfeld bewege ich mich nur noch an meinem Arbeitsplatz. Zu Hause sitze ich vor meinem Mac. Auf dem läuft in der &lt;a href=&quot;https://www.virtualbox.org/&quot; target=&quot;_blank&quot;&gt;VirtualBox&lt;/a&gt; auch Linux. Also gehe ich jetzt nur noch auf MonoDevelop ein. Obwohl ich auf meinem Arbeitsplatz PC&amp;nbsp;&lt;a href=&quot;http://www.icsharpcode.net/OpenSource/SD/Default.aspx&quot; target=&quot;_blank&quot;&gt;SharpDevelop&lt;/a&gt;&amp;nbsp;installiert habe. MonoDevelop ist einfach zu installieren. Das trifft sowohl auf die Linux Umgebung zu, wie auch auf dem Mac. Bei Linux ist das einfach ein Paket in der Paketverwaltung für den Mac ist auf der &lt;a href=&quot;http://www.mono-project.com/Main_Page&quot; target=&quot;_blank&quot;&gt;Mono-Projekt-Seite&lt;/a&gt; ein Paket mit der Runtime und dem SDK vorhanden das alles was das Herz begehrt enthält. Die MonoDevelop muss extra heruntergeladen und installiert werden. Dieses Programm &amp;nbsp;prüft hier sogar ob eine neuere Version der IDE zur Verfügung steht. Wenn dies der Fall ist so wird angeboten diese herunter zuladen und anschließend zu installieren.&lt;br /&gt;Für Windows gibt es eine GTK-Spezial Version für .NET.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Der Beginn&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Wenn die Laufzeitumgebung von &lt;a href=&quot;http://www.mono-project.com/Main_Page&quot; target=&quot;_blank&quot;&gt;Mono&lt;/a&gt; und die IDE installiert sind kann es direkt losgehen. Die Laufzeitumgebung ist komplett. Das bedeutet es ist eine Kommandozeilen Schnittstelle vorhanden. Für die Darstellung grafischer Elemente, das GUI, sind für jede Plattform die GTK Bibliotheken vorhanden. Das ist besonders praktisch wenn man Programme einwickeln will die überall laufen. Sollte man bei Windows den Wunsch verspüren anstelle von &lt;a href=&quot;http://www.gtk.org/&quot; target=&quot;_blank&quot;&gt;GTK&lt;/a&gt; das Original .NET-Paket zu verwenden kann man die leichte Version von Mono installieren. Außerdem ist es sinnvoll Programme die rein in der Windows Umgebung laufen soll mit der&amp;nbsp;&lt;a href=&quot;http://www.icsharpcode.net/OpenSource/SD/Default.aspx&quot; target=&quot;_blank&quot;&gt;SharpDevelop&lt;/a&gt;&amp;nbsp;IDE zu entwickeln.&amp;nbsp;&lt;a href=&quot;http://www.icsharpcode.net/OpenSource/SD/Default.aspx&quot; target=&quot;_blank&quot;&gt;SharpDevelop&lt;/a&gt;&amp;nbsp;erlaubt es die WinForms zu verwenden.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Die Möglichkeiten&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Für den Mac stehen diese Projektvorlagen bereit:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-6p4ZY4RlIaQ/T1KTuvE8ADI/AAAAAAAAAzQ/FIjvUZ6C1jM/s1600/MonoProjekte.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;http://1.bp.blogspot.com/-6p4ZY4RlIaQ/T1KTuvE8ADI/AAAAAAAAAzQ/FIjvUZ6C1jM/s320/MonoProjekte.jpg&quot; width=&quot;141&quot; /&gt;&lt;/a&gt;Bei Linux fehlen die Einträge &quot;Mono für Android&quot;, &quot;MonoMac&quot; und &quot;Mono Touch&quot;. Selbstverständlich stehen unter Linux Pakete bereit um die Möglichkeiten hier zu erhöhen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Das erste Projekt&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Zum Testen und probieren gibt es zu Glück auf der &lt;a href=&quot;http://www.mono-project.com/Main_Page&quot; target=&quot;_blank&quot;&gt;Mono-Prejekt-Seite&lt;/a&gt; ein GTK Projekt. Das habe ich versucht mit der Mac IDE nachzubauen. Dabei musste ich leider feststellen dass die IDE wackelt. Sie stürzt leider bei dem Zusammenflicken der GUI ab. Ich habe dann die GUI in der VirtualBox gebastelt dann hat alles funktioniert. Allerdings sind bei meiner realen Maschine (Mac) und der Virtuellen Maschine (Linux) die SDK Versionen nicht gleich. Deswegen kann man zwar Projekt in beiden Systemen abwechselnd bearbeitet aber nur beim Mac bauen.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Fazit&lt;/b&gt;&lt;br /&gt;Es macht sogar Spaß etwas mit Mono zu machen. Und das obwohl ich mich eigentlich immer gegen .NET gewehrt hatte. Vielleicht hat mich der Umstieg zum Mac in dieser Richtung geläutert. Ein kleiner Zwang besteht natürlich auch hier, Microsoft lässt die alten Programmsprachen für die Systemverwaltung sterben. Also habe ich keine Lust mehr mich mit &quot;CMD&quot; und &quot;VBS&quot; auseinanderzusetzen. Mein primäres System ist der Mac. Trotzdem möchte ich ein SDK nutzen das es mir ermöglicht für alle Plattformen etwas zu machen. &lt;a href=&quot;http://www.oracle.com/technetwork/java/index.html&quot; target=&quot;_blank&quot;&gt;Java&lt;/a&gt; scheint mir im Moment etwas halbherzig vorangebracht zu werden. Was soll ich sagen, Mono fängt bereits an ein wenig Spaß zu machen.</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/1358588652549043019/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2012/03/mono-die-ersten-schritte.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/1358588652549043019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/1358588652549043019'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2012/03/mono-die-ersten-schritte.html' title='Mono die ersten Schritte'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-6p4ZY4RlIaQ/T1KTuvE8ADI/AAAAAAAAAzQ/FIjvUZ6C1jM/s72-c/MonoProjekte.jpg" height="72" width="72"/><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-1745381521660632796</id><published>2011-05-05T23:35:00.000+02:00</published><updated>2011-06-18T11:20:33.871+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="CMake"/><category scheme="http://www.blogger.com/atom/ns#" term="LRELEASE"/><category scheme="http://www.blogger.com/atom/ns#" term="Opensource"/><category scheme="http://www.blogger.com/atom/ns#" term="QM"/><category scheme="http://www.blogger.com/atom/ns#" term="qmake"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><category scheme="http://www.blogger.com/atom/ns#" term="RCC"/><title type='text'>QT Übersetzungen Extern oder im Programm</title><content type='html'>&lt;h2&gt;Alternativen&lt;/h2&gt;&lt;br /&gt;Das &lt;a href=&quot;http://doc.qt.nokia.com/latest/index.html&quot;&gt;QT-Paket&lt;/a&gt; bietet zwei Möglichkeiten die übersetzten Texte in das Programm zu integrieren.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Methode 1 (Linux like)&lt;/h3&gt;&lt;br /&gt;In einer externen Datei. Diese Datei enthält die entsprechenden lokalisierten Texte. Für jede Sprache ist eine Datei notwendig. Typisch ist das Sammeln dieser Dateien in dem Verzeichnis &lt;code&gt;translations&lt;/code&gt;. In dem Programm, der Datei &lt;i&gt;main.cpp&lt;/i&gt; ist der Code:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;QString locale = QLocale::system().name();&lt;br /&gt;&lt;br /&gt;QTranslator translator;&lt;br /&gt;translator.load(QString(&quot;translations&quot; +&lt;br /&gt;QDir::separator() +&lt;br /&gt;&quot;jmnsishelper_&quot;) + locale);&lt;br /&gt;a.installTranslator(&amp;amp;translator);&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;zu dem laden der Übersetzung notwendig. In der ersten Zeile wird ermittelt in was für einer Lokalisierung das Programm aktuell seine Arbeit tut. Das Ergebnis wird in die Variable locale gespeichert. Diese Variable enthält eine Zeichenkette, die für Deutschland &lt;i&gt;de&lt;/i&gt; lautet. Diese Zeichenkette wird dann dem Dateinamen angehängt. Die neu gebildete Zeichenkette, die den Dateinamen enthält, wird jetzt der Klasse &lt;a href=&quot;http://doc.qt.nokia.com/latest/qtranslator.html&quot;&gt;QTranslator&lt;/a&gt; übergeben. Die in der Bibliothek enthaltenen Funktionen kümmern sich dann um den Rest.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Methode 2 (Windows like)&lt;/h2&gt;&lt;br /&gt;Die zweite Möglichkeit stellt die Übersetzung als Resource bereit. Dazu wird die mit &lt;a href=&quot;http://doc.qt.nokia.com/latest/linguist-manager.html#lrelease&quot;&gt;LRelease&lt;/a&gt; erzeugte &lt;code&gt;qm&lt;/code&gt; Datei benötigt. Diese Datei wird dann in C++ Quelltext umgewandelt. Dieser Quelltext wird kompiliert um dann mit den anderen Quellkode Dateien zu einem Programm gelinkt zu werden.&lt;br /&gt;&lt;br /&gt;Für das hinzufügen der Übersetzungen ist ein &lt;a href=&quot;http://doc.qt.nokia.com/latest/resources.html&quot;&gt;QRC&lt;/a&gt; Datei notwendig:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;rcc&amp;gt;&amp;lt;qresource prefix=&quot;ts&quot;&amp;gt;&lt;br /&gt;&amp;lt;file&amp;gt;jmnsishelper_de.qm&amp;lt;/file&amp;gt;&lt;br /&gt;&amp;lt;file&amp;gt;jmnsishelper_es.qm&amp;lt;/file&amp;gt;&lt;br /&gt;&amp;lt;file&amp;gt;jmnsishelper_it.qm&amp;lt;/file&amp;gt;&lt;br /&gt;&amp;lt;file&amp;gt;jmnsishelper_tr.qm&amp;lt;/file&amp;gt;&lt;br /&gt;&amp;lt;/qresource&amp;gt;&amp;lt;/rcc&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Die Resource sieht so aus:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;static const unsigned char qt_resource_data[] = {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;0x0,0x0,0xa,0x55,&lt;/code&gt;&lt;br /&gt;&lt;code&gt;0x3c,&lt;/code&gt;&lt;br /&gt;&lt;code&gt;0xb8,0x64,0x18,0xca,0xef,0x9c,0x95, ...&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;da diese immer vom &lt;code&gt;&lt;a href=&quot;http://doc.qt.nokia.com/latest/qmake-manual.html&quot;&gt;QMake&lt;/a&gt;&lt;/code&gt; Werkzeug oder besse mit &lt;code&gt;&lt;a href=&quot;http://www.cmake.org/&quot;&gt;CMake&lt;/a&gt;&lt;/code&gt;&amp;nbsp; erzeugt wird muss man (zum Glück) hier nichts tun.&lt;br /&gt;Der Quelltext der &lt;i&gt;main.cpp&lt;/i&gt; sieht hier auch anders aus.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;QString lang = QLocale::system().name();&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;QTranslator translator;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;translator.load(&quot;jmnsishelper_&quot; + lang, &quot;:/ts/&quot;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;a.installTranslator(&amp;amp;translator);&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;Vorteile und Nachteile&lt;/h2&gt;&lt;br /&gt;Die zweite Möglichkeit vereinfacht das Zusammenstellen des Pakets. Außerdem spart man sich ein Unterverzeichnis. Auch der in &lt;i&gt;main.cpp&lt;/i&gt; geschriebene Quellcode ist kürzer. Allerdings hat diese Methode aus Nachteile. Wenn die Übersetzung auf den neuesten Stand gebracht wurde ist das Programm komplett zu kompilieren und zu linken. Bei der Methode eins kann man einfach die &lt;i&gt;qm&lt;/i&gt;-Datei im Verzeichnis &lt;code&gt;translations&lt;/code&gt; ersetzen. Außerdem gibt es, zumindest bei Linux auch Werkzeuge die, die &lt;i&gt;qm&lt;/i&gt;-Datei auslesen können. Das geht nach der Methode zwei nicht.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/1745381521660632796/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2011/05/qt-ubersetzungen-extern-oder-im.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/1745381521660632796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/1745381521660632796'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2011/05/qt-ubersetzungen-extern-oder-im.html' title='QT Übersetzungen Extern oder im Programm'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-4259416856270483367</id><published>2011-04-11T10:03:00.000+02:00</published><updated>2012-04-10T20:10:48.727+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CMake"/><category scheme="http://www.blogger.com/atom/ns#" term="DEB"/><category scheme="http://www.blogger.com/atom/ns#" term="DMG"/><category scheme="http://www.blogger.com/atom/ns#" term="NSIS"/><category scheme="http://www.blogger.com/atom/ns#" term="Opensource"/><category scheme="http://www.blogger.com/atom/ns#" term="qmake"/><category scheme="http://www.blogger.com/atom/ns#" term="RPM"/><category scheme="http://www.blogger.com/atom/ns#" term="TGZ"/><category scheme="http://www.blogger.com/atom/ns#" term="ZIP"/><title type='text'>CMake für Programmpakete</title><content type='html'>Hallo zusammen, wie bereits in früheren Einträgen beschrieben ist&amp;nbsp;&lt;a href=&quot;http://www.cmake.org/&quot; target=&quot;_blank&quot; title=&quot;CMake&quot;&gt;CMake&lt;/a&gt;&amp;nbsp;sehr vielseitig. Im Gegensatz zu&amp;nbsp;&lt;a href=&quot;http://doc.qt.nokia.com/latest/qmake-manual.html&quot; target=&quot;_blank&quot; title=&quot;QMake&quot;&gt;QMake&lt;/a&gt;&amp;nbsp;lässt es sich für alle Arten von Projekten verwenden. Es ist nicht an eine Umgebung gebunden. &lt;h1&gt;CPACK&lt;/h1&gt;Als zusätzliche Funktion haben die Entwickler sogar einen Paket Builder intergriert. Mit diesem, in dem normalen Programmumfang enthaltenen, Zusatzmodul kann man einfach das aktuelle Projekt packen. Wie nicht anders zu erwarten bietet&amp;nbsp;&lt;a href=&quot;http://www.cmake.org/&quot; target=&quot;_blank&quot; title=&quot;CMake&quot;&gt;CMake&lt;/a&gt;&amp;nbsp;hier viele Ziele für verschiedene Umgebungen zu Verfügung. &lt;h2&gt;Archive&lt;/h2&gt;Es können Archive generiert werden: &lt;ul&gt;&lt;li&gt;TGZ - Tar mit GnuZIP&lt;/li&gt;&lt;li&gt;STGZ - Selbstenpakendes TGZ&lt;/li&gt;&lt;li&gt;TBZ2 - Tar mit BZip2 (ein Archiv das besser komprimiert ist)&lt;/li&gt;&lt;li&gt;TZ - Tar mit Compress ?&lt;/li&gt;&lt;li&gt;ZIP - Für die Windows Umgebung. Es muss 7Zip oder WinZIP installiert sein.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Windows&lt;/h3&gt;Für die Windows Umgebung steht ein&amp;nbsp;&lt;a href=&quot;http://nsis.sourceforge.net/Main_Page&quot; target=&quot;_blank&quot; title=&quot;NSIS&quot;&gt;NSIS&lt;/a&gt;&amp;nbsp;Generator zur Verfügung. Außerdem können für die&amp;nbsp;&lt;a href=&quot;http://www.cygwin.com/&quot; target=&quot;_blank&quot; title=&quot;cygwin&quot;&gt;Cygwin&lt;/a&gt;&amp;nbsp;Umgebung Binäre und Quellpakete erzeugt werden. &lt;h3&gt;Mac&lt;/h3&gt;Für die OSX Umgebung können diese Archive erzeugt werden: &lt;ul&gt;&lt;li&gt;DragNDrop&lt;/li&gt;&lt;li&gt;PackageMaker - PackageMaker muss installiert sein.&lt;/li&gt;&lt;li&gt;OSXX11 - hdiutil muss installiert sein.&lt;/li&gt;&lt;li&gt;Bundle&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Linux&lt;/h3&gt;Für Unix können sowohl Debian (DEB), wie auch RPM Pakete erzeugt werden. Die komplette Beschreibung und die zugehörigen Parameter sind in dem&amp;nbsp;&lt;a href=&quot;http://www.itk.org/Wiki/CMake:Packaging_With_CPack&quot; target=&quot;_blank&quot; title=&quot;WIKI&quot;&gt;WIKI&lt;/a&gt;&amp;nbsp;von CMake zu finden. &lt;h2&gt;Wie funktioniert es ?&lt;/h2&gt;Doch wie werden diese Funktion aufgerufen ? Das ist ganz einfach. Der&amp;nbsp;&lt;code&gt;CMakeLists.txt&lt;/code&gt;&amp;nbsp;Datei muss nur eine Zeile hinzugefügt werden. &lt;code&gt;INCLUDE(CPack)&lt;/code&gt;Dadurch wird nicht nur eine zusätzliche Textdatei mit dem Namen&amp;nbsp;&lt;code&gt;CPackList.txt&lt;/code&gt;&amp;nbsp;erzeugt sondern auch ein neues Ziel in dem&amp;nbsp;&lt;code&gt;Makefile&lt;/code&gt;. Durch den Aufruf &lt;pre&gt;&lt;br /&gt;&lt;code&gt;make package&lt;/code&gt;&lt;/pre&gt;wird das für die aktuelle Umgebung definierte Standardpaket erzeugt. Die entsprechenden Optionen sollten in der&amp;nbsp;&lt;code&gt;CMakeLists.txt&lt;/code&gt;&amp;nbsp;Datei festgelegt werden. So können Sie entsprechend der dem&amp;nbsp;&lt;a href=&quot;http://www.cmake.org/&quot; target=&quot;_blank&quot; title=&quot;CMake&quot;&gt;CMake&lt;/a&gt;&amp;nbsp;bekannten Syntax festlegen wie das System das Paket erzeugt. Außerdem kann auch bei dem Aufruf noch die Variable belegt werden: &lt;pre&gt;&lt;code&gt;cmake -DCPACK_GENERATOR=DEB&lt;/code&gt;&lt;/pre&gt;würde ein Debian Paket erzeugt. Das geht alles einfach und locker von der Hand.&amp;nbsp;&lt;em&gt;Eine Warnung aber trotzdem noch&lt;/em&gt;. Die Betonung liegt hier wirklich auf einfach. Große komplizierte Paket lassen sich mit dieser Funktion natürlich auch nicht einfach erzeugen. Hier muss der Paketbetreuer oder der Programmierer verständlicherweise mehr Aufwand betreiben. Ein einfaches Beispiel ist&amp;nbsp;&lt;a href=&quot;http://www.itk.org/Wiki/CMake/CPackExample&quot; target=&quot;_blank&quot; title=&quot;hier&quot;&gt;hier&lt;/a&gt;&amp;nbsp;zu finden.</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/4259416856270483367/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2011/04/cmake-fur-programmpakete.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/4259416856270483367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/4259416856270483367'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2011/04/cmake-fur-programmpakete.html' title='CMake für Programmpakete'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-5407706171791824018</id><published>2011-03-28T10:10:00.000+02:00</published><updated>2012-04-10T20:12:31.990+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="asciidoc"/><category scheme="http://www.blogger.com/atom/ns#" term="docbook"/><category scheme="http://www.blogger.com/atom/ns#" term="LaTex"/><category scheme="http://www.blogger.com/atom/ns#" term="Opensource"/><category scheme="http://www.blogger.com/atom/ns#" term="Programmanleitung"/><title type='text'>Programmanleitungen erstellen</title><content type='html'>&lt;br /&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Hallo zusammen,&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;ich teste gerade welches Werkzeug sich am besten eignet um Anleitungen und Online-Hilfe für Programme zu erstellen. Die erste Anleitung habe mit der Unterstützung von&amp;nbsp;&lt;a href=&quot;http://www.methods.co.nz/asciidoc/&quot;&gt;asciidoc&lt;/a&gt;&amp;nbsp;erstellt. Das funktioniert recht gut und ist einfach zu erstellen. Das Programm asciidoc ist in Python programmiert und setzt deswegen einen installierten Python Interpreter voraus. Wenn sie die Funktion a2x verwenden wollen werden zusätzlich noch einige andere Softwarepakete benötigt. Für den vollen Funktionsumfang ist das:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;xsltproc: (all formats except text):&amp;nbsp;&lt;a href=&quot;http://xmlsoft.org/XSLT/&quot;&gt;http://xmlsoft.org/XSLT/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;DocBook XSL Stylesheets (all formats except text):&amp;nbsp;&lt;a href=&quot;http://docbook.sourceforge.net/projects/xsl/&quot;&gt;http://docbook.sourceforge.net/projects/xsl/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;dblatex (pdf, dvi, ps, tex formats):&amp;nbsp;&lt;a href=&quot;http://dblatex.sourceforge.net/&quot;&gt;http://dblatex.sourceforge.net/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;FOP (pdf format — alternative PDF file generator):&amp;nbsp;&lt;a href=&quot;http://xmlgraphics.apache.org/fop/&quot;&gt;http://xmlgraphics.apache.org/fop/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;w3m (text format):&amp;nbsp;&lt;a href=&quot;http://w3m.sourceforge.net/index.en.html&quot;&gt;http://w3m.sourceforge.net/index.en.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Lynx (text format — alternative text file generator):&amp;nbsp;&lt;a href=&quot;http://lynx.isc.org/&quot;&gt;http://lynx.isc.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;epubcheck (epub format — EPUB file validator):&amp;nbsp;&lt;a href=&quot;http://code.google.com/p/epubcheck/&quot;&gt;http://code.google.com/p/epubcheck/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Die Paketverwaltung ihrer Linuxdistributation hilft ihnen die richtigen Pakete alle zu installieren.&lt;/div&gt;&lt;h2&gt;Das Quellcode Format&lt;/h2&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Wer bereits das Format&amp;nbsp;&lt;a href=&quot;http://maven.apache.org/doxia/references/apt-format.html&quot;&gt;APT&lt;/a&gt;&amp;nbsp;von Apache Maven Doxia kennt wird nicht überrascht sein. Die Formate ähneln sich etwas. Die komplette Anleitung ist&amp;nbsp;&lt;a href=&quot;http://www.methods.co.nz/asciidoc/asciidoc.css-embedded.html&quot;&gt;hier&lt;/a&gt;&amp;nbsp;zu finden. Ich werde hier an dem Beispiel der Anleitung zu meinem Programm jmnsishelper, das noch lange nicht fertig ist, erläutern wie asciidoc funktioniert.&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Ein Dokument muss einen Header und eine Section enthalten um gültig zu sein.&lt;/div&gt;&lt;h3&gt;Header&lt;/h3&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Ich habe bei meiner Dokumentation allerdings mit einem Kommentarblock begonnen. Der Kommentarblock beginnt und endet mit der Zeichenfolge: &quot;&lt;code&gt;////&lt;/code&gt;&quot;, das müssen mindesten vier gleiche Zeichen sein. Können aber natürlich auch mehr Zeichen sein.&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Jetzt kommt auch bei mir der Header. Doch hier erst einmal ein Beispiel was wir bis jetzt haben:&lt;/div&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;code&gt;&lt;br /&gt;//////////////////////////////////////////&lt;br /&gt;Der Kommentar&lt;br /&gt;//////////////////////////////////////////&lt;br /&gt;&lt;br /&gt;Anleitung für JMNSISHelper&lt;br /&gt;==========================&lt;br /&gt;Jürgen Mülbert &lt;br /&gt;V0.1, März 2011&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Der Header enthält den Titel des Dokuments. Das sind die beiden Zeilen, Anleitung für&amp;nbsp;&lt;code&gt;JMNSISHelper&lt;/code&gt;&amp;nbsp;und&amp;nbsp;&lt;code&gt;==========================&lt;/code&gt;. In der nächsten Zeile steht dann der Autor des Dokuments.Wahlweise können Sie in dieser Zeile auch noch die EMail-Adresse des Verfassers anhängen.In der letzten Zeile des Headers kommen dann noch zwei Informationen. Die Version des Dokuments und das Erstellungsdatum.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-RsREq3WgUNo/TZDJwxpd9jI/AAAAAAAAAlo/qvbac4iLKSI/s1600/asciidoc_header.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;92&quot; src=&quot;http://3.bp.blogspot.com/-RsREq3WgUNo/TZDJwxpd9jI/AAAAAAAAAlo/qvbac4iLKSI/s320/asciidoc_header.png&quot; style=&quot;cursor: move;&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Das sieht doch schon gut aus.&lt;/div&gt;&lt;h3&gt;Section&lt;/h3&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Die Section(en) enthalten den Inhalt der Dokumentation, also die gesamten Texte und eventuelle Illustrationen. Dazu gibt es wieder ein paar zusätzliche Formatbefehle.&lt;/div&gt;&lt;h4&gt;Überschriften&lt;/h4&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Level 0 (top level):     ======================&lt;/pre&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Level 1:                 ----------------------&lt;/pre&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Level 2:                 ~~~~~~~~~~~~~~~~~~~~~~&lt;/pre&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Level 3:                 ^^^^^^^^^^^^^^^^^^^^^^&lt;/pre&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Level 4 (bottom level):  ++++++++++++++++++++++&lt;/pre&gt;&lt;h4&gt;Listen&lt;/h4&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;* Listeneintrag&lt;/pre&gt;&lt;h4&gt;Bilder&lt;/h4&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;image:images/document-new.png[document new] Neu&lt;/pre&gt;&lt;h4&gt;Links&lt;/h4&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;https://launchpad.net/jmnsishelper[Projektseite] - extern&lt;/pre&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;link:menuleiste[Die Menüleiste] &lt;br /&gt;        - intern (innerhalb des Dokuments.&lt;/pre&gt;&lt;h4&gt;Formattierung&lt;/h4&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;*FETT* - Dieses Wort wird Fett dargestellt.&lt;/pre&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;_EMPHASED_ - Dieses Wort wird betont dargestellt.&lt;/pre&gt;&lt;pre style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Am Ende der Zeile ein Leerzeichen gefolgt von einem &lt;br /&gt; &lt;code&gt;+&lt;/code&gt; erzeugt einen Zeilenumbruch.&lt;br /&gt;&lt;/pre&gt;&lt;h3&gt;Erzeugen von Zieldokumenten&lt;/h3&gt;&lt;h4&gt;XHTML&lt;/h4&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Das generieren eines (X)HTML-Dokumentes ist einfach. Hier wird nachdem das Quelldokument gespeichert wurde der Befehl&amp;nbsp;&lt;code&gt;asciidoc dateiname&lt;/code&gt;&amp;nbsp;eingegeben. Dadurch wird mit der Hilfe der Quelldatei eine HTML-Datei erzeugt.&lt;/div&gt;&lt;h4&gt;Andere Formate&lt;/h4&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Wenn alle Zusatzmodule installiert wurden ist es möglich aus der Quelldatei verschiedene andere Ziele zu erzeugen.&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Es können Ziele für folgende Formate erzeugt werden: chunked, docbook, dvi, epub, htmlhelp, manpage, pdf (default), ps, tex, text, xhtml.&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Dafür wird der Befehl&amp;nbsp;&lt;code&gt;a2x&lt;/code&gt;&amp;nbsp;benötigt. Zum Beispiel erzeugt der Befehl&amp;nbsp;&lt;code&gt;a2x -L -f pdf dateiname&lt;/code&gt;&amp;nbsp;auf der Datei ein PDF-Dokument.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/5407706171791824018/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2011/03/hallo-zusammen-ich-teste-gerade-welches.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/5407706171791824018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/5407706171791824018'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2011/03/hallo-zusammen-ich-teste-gerade-welches.html' title='Programmanleitungen erstellen'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-RsREq3WgUNo/TZDJwxpd9jI/AAAAAAAAAlo/qvbac4iLKSI/s72-c/asciidoc_header.png" height="72" width="72"/><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-4310539413876670103</id><published>2011-03-06T10:08:00.000+01:00</published><updated>2012-03-29T10:09:55.192+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="asciidoc"/><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="javahelp"/><category scheme="http://www.blogger.com/atom/ns#" term="LaTex"/><category scheme="http://www.blogger.com/atom/ns#" term="Opensource"/><category scheme="http://www.blogger.com/atom/ns#" term="QDOC"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><title type='text'>Programm Anleitungen erstellen.</title><content type='html'>&lt;br /&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Hallo zusammen,&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;lange habe ich gesucht und probiert.&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Die Problemstellung war: Wie kann ich eine gute Anleitung für meine Programme erstellen ? Ich erstelle wie viele andere auch nicht gerne Programmdokumentationen und Anleitungen.&lt;/div&gt;&lt;h1&gt;Java&lt;/h1&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Für die Java-Umgebung gibt es immerhin maven mit einem guten Werkzeug um auch Internetseiten zu erzeugen. Mit diesem Werkzeug könnt ihr sowohl Websites wie auch Source-Code, Abhängikeiten und Mitwirkende veröffentlichen. Maven ist ein komplettes Werkzeug mit dem alles was veröffentlicht werden soll auch veröffentlicht werden kann. Die Internetseiten können auch für mehrere Sprachen veröffentlicht werden. Toll.&lt;/div&gt;&lt;h1&gt;C++ und andere Sprachen&lt;/h1&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Hier gibt es so etwas nicht. Dafür habe ich versucht qdoc3 aus der QT4 Entwicklungsumgebung zu verwenden. Das würde auch funktionieren. Allerdings erfüllt das Werkzeug dann seinen eigentlichen Zweck nicht mehr. Es werden gute Internetseiten aber schlechte Dokumentationen erzeugt.&lt;/div&gt;&lt;h1&gt;Internet und Anleitungen trennen.&lt;/h1&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Also hilfe es nur diese beiden Verwendungszwecke zu trennen. Es funktioniert bei maven im Internet gut. Es werden sehr viele Dateien für das Web erzeugt, aber keine davon lässt sich als Programmdokumentation verwenden. Das ist sowohl für Online-Hilfe zutreffend, wie auch für die &quot;beigepackte&quot; Anleitung. Bei QT4 ist es genau anders herum. Hier wird, wenn man das ganze nicht vorher umbiegt, eine gute Online-Hilfe oder lokale Programmanleitung erzeugt aber ein mäßige Website. Oder man muss für diesen Zweck zwei Anleitungen erzeugen. Das ist nicht sehr zielführend...&lt;/div&gt;&lt;h1&gt;Lösungen:&lt;/h1&gt;&lt;h2&gt;asciidoc&lt;/h2&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Mit asciidoc lassen sich aus normalen Textdateien gute HTML-Dokumente erzeugen. Außerdem kann mit dem Werkzeug a2x aus der Quelldatei ein PDF-Dokument erzeugt werden. asciidoc eignet sich auch zu der Generierung ganzer Websites. Also mehrere Textdokumente mit einem Menü versehen...&lt;/div&gt;&lt;h2&gt;docbook-xsl&lt;/h2&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Mit Docbook können aus einer XML-Quelldatei verschiedene Dateien erzeugt werden:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;html - Eine große Html-Datei&lt;/li&gt;&lt;li&gt;htmlchunked - Mehrere HTML-Datei&lt;/li&gt;&lt;li&gt;javahelp&lt;/li&gt;&lt;li&gt;MSHelp&lt;/li&gt;&lt;li&gt;PDF&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Dieses Format ist also sehr vielseitig und in der Linuxwelt sehr verbreitet.&lt;/div&gt;&lt;h2&gt;LaTex&lt;/h2&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Mit LaTex werden meistens sehr hochwertige Dokumentationen oder Bücher geschrieben. Auch dieses Format ist sehr vielseitig:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;html&lt;/li&gt;&lt;li&gt;xhtml&lt;/li&gt;&lt;li&gt;docbook&lt;/li&gt;&lt;li&gt;openoffice&lt;/li&gt;&lt;li&gt;pdf&lt;/li&gt;&lt;li&gt;javadoc&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Das ist erst einmal mehr wie docbook kann. Und dazu kommt noch die Möglichkeit LaTex zu docbook zu konvertieren. Das verspricht sehr interessant zu werden...&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/4310539413876670103/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2011/03/programm-anleitungen-erstellen.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/4310539413876670103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/4310539413876670103'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2011/03/programm-anleitungen-erstellen.html' title='Programm Anleitungen erstellen.'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-6963558161116847570</id><published>2011-03-02T23:43:00.000+01:00</published><updated>2011-06-18T11:22:00.014+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="asciidoc"/><category scheme="http://www.blogger.com/atom/ns#" term="CMake"/><category scheme="http://www.blogger.com/atom/ns#" term="QDOC"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><category scheme="http://www.blogger.com/atom/ns#" term="QTHelp"/><title type='text'>QDoc kann nicht für Websites eingesetzt werden!</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;Hallo zusammen!&lt;br /&gt;Ich habe es jetzt geschafft meine Dokumentation für&lt;a href=&quot;http://www.juergen-muelbert.de/jmnsishelper/&quot; target=&quot;_blank&quot;&gt;JMNSISHelper&lt;/a&gt; soweit fertigzustellen. Den HTML-Rahmen hatte ich auch an meine &lt;a href=&quot;http://www.juergen-muelbert.de/&quot; target=&quot;_blank&quot;&gt;Website&lt;/a&gt; angepasst. Es kam eine passable Website heraus- Diese generierte &lt;a href=&quot;http://www.juergen-muelbert.de/jmnsishelper/00-jmnsishelper.html&quot; target=&quot;_blank&quot;&gt;Seite&lt;/a&gt; passte dann, wie von mir gewünscht, in der Form und Gestaltung zu den vorhandenen anderen Seiten. Die Seite sieht so aus:&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-MwQELo95azg/TW7Iu53vCUI/AAAAAAAAAiA/AWqYnws2FYQ/s1600/jmnsishelper_mainwindow_help1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;256&quot; src=&quot;http://3.bp.blogspot.com/-MwQELo95azg/TW7Iu53vCUI/AAAAAAAAAiA/AWqYnws2FYQ/s320/jmnsishelper_mainwindow_help1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Das was ich bis zu dieser Zeile geschrieben habe passt nicht zur Überschrift. Wer aber in meinem Blog schon gelesen hat, weis da kommt noch was.&lt;br /&gt;Jetzt nachdem eigentlich alles gut war habe ich mit dem Hilfsprogramm qhelpgenerator die kompilierte Hilfsdatei erzeugt. Eine gute kurze englische Anleitung zu den QT-Hilfsprogrammen gibt es &lt;a href=&quot;http://doc.qt.nokia.com/qq/qq28-qthelp.html&quot; target=&quot;_blank&quot;&gt;hier&lt;/a&gt;. Diese Programmhilfe habe ich mir danach gleich mit dem Assistant angesehen. Leider war das Ergebnis nicht so wie erwartert. Es wird hier trotz der gesetzten &quot;-creator&quot; Option immer noch die Online-Version erzeugt. Es wird auch hier der komplette HTML-Vorspann und HTML-Fuss mit eingebunden. Das Ergebnis könnte man fast genauso ins Web setzen. Das würde natürlich nicht funktionieren, weil Dateien mit der &quot;.qhc&quot; oder &quot;.qhp&quot; Erweiterung für einen Webbrowser nicht darstellbar sind. Es werden auch nicht alle Skripte im Kopf und Fuß der erzeugten Dateien eingebunden. Die Hilfedatei sieht so aus:&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-xCoWzRtKTVA/TW7I2mGdtNI/AAAAAAAAAiI/JxtboExD-dk/s1600/jmnsishelper_mainwindow_help2.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;148&quot; src=&quot;http://4.bp.blogspot.com/-xCoWzRtKTVA/TW7I2mGdtNI/AAAAAAAAAiI/JxtboExD-dk/s320/jmnsishelper_mainwindow_help2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also wenn der Wunsch aufkommt die Programmdokumentation in das Internet zu stellen qdoc3 nicht benutzen. Da erzeugt das Programm &lt;a href=&quot;http://www.methods.co.nz/asciidoc/&quot; target=&quot;_blank&quot;&gt;asciidoc&lt;/a&gt; schönere Ergebnisse. Dieses Programm kann auch zu der Generierung ganzer Website&#39;s genutzt werden. Ich werde das testen und hier berichten. Versprochen!&lt;br /&gt;qdoc3 ist hervorragend geeignet um Programm-Anleitungen und Hilfen zu erzeugen. Der qhelpgenerator baut aus der qdoc-Datei eine komprimierte Hilfedatei, die über sqlite ausgelesen wird. Hier bin gerade beschäftigt das ganze mit &lt;a href=&quot;http://www.cmake.org/&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cmake&lt;/code&gt;&lt;/a&gt; zu erzeugen. Ich bin gespannt wie das funktionieren wird... &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/6963558161116847570/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2011/03/qdoc-kann-nicht-fur-websites-eingesetzt.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/6963558161116847570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/6963558161116847570'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2011/03/qdoc-kann-nicht-fur-websites-eingesetzt.html' title='QDoc kann nicht für Websites eingesetzt werden!'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-MwQELo95azg/TW7Iu53vCUI/AAAAAAAAAiA/AWqYnws2FYQ/s72-c/jmnsishelper_mainwindow_help1.png" height="72" width="72"/><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-1936238774736359951</id><published>2011-02-17T22:17:00.000+01:00</published><updated>2011-06-18T11:27:48.017+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CMake"/><category scheme="http://www.blogger.com/atom/ns#" term="MINGW"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><category scheme="http://www.blogger.com/atom/ns#" term="Skript"/><title type='text'>QT und CMake</title><content type='html'>Hallo liebe Leser,&lt;br /&gt;&lt;br /&gt;nach dem ich jetzt bereits einige Erfahrungen mit &lt;code&gt;C++&lt;/code&gt; und &lt;a  href=&#39;http://doc.trolltech.com/4.7/qmake-manual.html&#39;&gt;&lt;code&gt;qmake&lt;/code&gt;&lt;/a&gt; gemacht habe will ich euch etwas neues berichten. Ich habe das Thema erstellen von Programmen versucht aus der &lt;a     href=&quot;http://www.cmake.org/&quot;&gt;&lt;code&gt;CMake&lt;/code&gt;&lt;/a&gt; Sicht anzugehen. Ich probiere immer gerne etwas neues. Es ist aber in diesem Fall wirklich so, &lt;a href=http://www.cmake.org/&quot;&gt;&lt;code&gt;CMake&lt;/code&gt;&lt;/a&gt; ist besser und hat auch andere Vorteile gegenüber &lt;a href=&#39;http://doc.trolltech.com/4.7/qmake-manual.html&#39;&gt;&lt;code&gt;qmake&lt;/code&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.cmake.org/&quot;&gt;&lt;code&gt;CMake&lt;/code&gt;&lt;/a&gt; ist nicht nur für QT geeignet.&lt;br /&gt;&lt;a href=&quot;http://www.cmake.org/&quot;&gt;&lt;code&gt;CMake&lt;/code&gt;&lt;/a&gt; enthält auch Unterstützung für Installer.&lt;br /&gt;&lt;a href=&quot;http://www.cmake.org/&quot;&gt;&lt;code&gt;CMake&lt;/code&gt;&lt;/a&gt; unterstützt findet aus dem System installierte Pakete und Script-Sprachen.&lt;br /&gt;&lt;br /&gt;Natürlich ist auch ein klein wenig Schatten vorhanden. So ein Paket kann ja nicht nur glänzen. Allerdings ist der Mängel den ich entdeckt habe und über den ich am Anfang gestolpert bin nicht durch CMake verursacht. Das Problem liegt an der Windows-Version des QT-GPL Paketes. Bei dieser Version ist ein &lt;code&gt;&quot;MINGW32-MAKE&quot;&lt;/code&gt; enthalten das zusammen mit &lt;a href=&quot;http://www.cmake.org/&quot;&gt;&lt;code&gt;CMake&lt;/code&gt;&lt;/a&gt; nicht funktioniert. Wer also genau wie ich es bei QT-Windows mit CMake versuchen will muss zuerst zusätzlich das &lt;a href=&quot;http://www.mingw.org/&quot;&gt;&lt;code&gt;MINGW&lt;/code&gt;&lt;/a&gt; in der aktuellen Version installieren. Die neu installierte Version funktioniert dann einwandfrei.&lt;br /&gt;Um den Bau eines neuen Programms zu vereinfachen legt ihr euch am besten eine BATCH Datei an die, die Umgebungsvariablen setzt. Die Alternative wäre unter Arbeitsplatz die entsprechenden Pfade unter PATH hinzuzufügen. Ich habe hier nur &lt;code&gt;&lt;pre&gt;&quot;C:\MINGW\bin&quot;&lt;/pre&gt;&lt;/code&gt; eingetragen damit die GUI-Variante von CMake auch den Compiler findet. Die restlichen Pfade werden in einem Script gesetzt das ich &lt;code&gt;&lt;pre&gt;&quot;CMakeShell.bat&quot;&lt;/pre&gt;&lt;/code&gt; genannt habe. Es ist nicht der kreativste Name, aber er trifft doch genau. In dieser Datei werden die Pfade zu dem QT-Verzeichnis, dem MINGW-Verzeichnis und dem CMake-Verzeichnis gesetzt. Jeder kann diese einfache kleine Datei bei bedarf erweitern: &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;echo Setting up a MinGW/Qt only environment...&lt;br /&gt;set QTDIR=C:\Qt\2010.05\qt&lt;br /&gt;set CMAKEDIR=&quot;C:\Programme\CMake 2.8&quot;&lt;br /&gt;set MINGWDIR=C:\MinGW&lt;br /&gt;set PATH=C:\Qt\2010.05\qt\bin&lt;br /&gt;set PATH=%PATH%;%QTDIR%\bin;%MINGWDIR%\bin;%CMAKEDIR%\bin&lt;br /&gt;set PATH=%PATH%;%SystemRoot%\System32&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Jetzt müsst ihr nur beachten dass nicht das Batch-Script direkt gestartet wird. Das würde nur dazu führen das ein DOS-Fenster sich für einen Moment auf dem Bildschirm zeigt um gleich wieder zu verschwinden. Der Trick hier besteht darin eine neue Verknüpfung anzulegen. Diese Verknüpfung muss dann unter Ziel so anfangen: &lt;code&gt;&lt;pre&gt;&quot;C:\WINDOWS\system32\cmd.exe /K &quot;&lt;/pre&gt;&lt;/code&gt;. Direkt nach dem Leerzeichen folgt dann der Pfad zu dem Batch-Script.&lt;br /&gt;&lt;br /&gt;So und nun viel Spaß mit dem Testen von CMake. Ich werde zu diesem Thema hier auch bald wieder etwas schreiben.</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/1936238774736359951/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2011/02/qt-und-cmake.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/1936238774736359951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/1936238774736359951'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2011/02/qt-und-cmake.html' title='QT und CMake'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-8065389586873428116</id><published>2011-01-23T23:20:00.000+01:00</published><updated>2011-10-02T22:20:01.620+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="I18N"/><category scheme="http://www.blogger.com/atom/ns#" term="jmnsishelper"/><category scheme="http://www.blogger.com/atom/ns#" term="QDOC"/><category scheme="http://www.blogger.com/atom/ns#" term="qmake"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><title type='text'>QDoc nutzen</title><content type='html'>&lt;div xmlns=&#39;http://www.w3.org/1999/xhtml&#39;&gt;&lt;p&gt;Ich arbeite an dem Programm &lt;a href=&#39;http://www.juergen-muelbert.de/de/projects/jmnsishelper/index.html&#39;&gt;jmnsishelper&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Das ist mein erstes C++ und QT Projekt. Deswegen probiere ich selbstverständlich auch viel aus. Schließlich ist alles neu.&lt;/p&gt;&lt;p&gt;Deswegen war es auch klar das ich versucht habe mit &lt;a href=&#39;http://doc.qt.nokia.com/qdoc/index.html&#39;&gt;&lt;code&gt;QDOC&lt;/code&gt;&lt;/a&gt; die Programmdokumentation und die zugehörige Website zu erstellen. Das hat wieder einmal sehr viel Zeit gekostet. Aber dadurch habe ich auch gelernt wie QT4 hier &quot;tickt&quot;. Schon wieder anders wie erwartet. Ich hatte mir anhand des Quellcode einfach ein Beispiel in mein Projektverzeichnis kopiert. Jetzt hatte ich gedacht, einfach loslegen ist doch alles ganz einfach.&lt;/p&gt;&lt;p&gt;Dies wäre zwar schön gewesen. Doch leider ist alle Arbeit mit Mühe verbunden. Die Probleme die sich bei diesen Versuchen herausstellten:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Es wurden trotz mehrfach geänderten Eingaben in der Konfigurationsdatei immer nur die vorgegeben &lt;a href=&#39;http://de.wikipedia.org/wiki/Cascading_Style_Sheets&#39;&gt;CSS&lt;/a&gt; und &lt;a href=&#39;http://de.wikipedia.org/wiki/JavaScript&#39;&gt;JavaScript&lt;/a&gt; Dateien in die &lt;a href=&#39;http://de.wikipedia.org/wiki/Hypertext_Markup_Language&#39;&gt;HTML&lt;/a&gt; Datei geschrieben.&lt;/li&gt;&lt;li&gt;Die lokalisierte Version lies sich nicht erstellen,&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Das zweite Problem hat nur indirekt etwas mit &lt;a href=&#39;http://doc.qt.nokia.com/qdoc/index.html&#39;&gt;&lt;code&gt;QDOC&lt;/code&gt;&lt;/a&gt; zu tun. Hier hilft nur eine Überarbeitung des QMAKE Files. Wie weiter oben erwähnt habe ich ein Original QT4 Projekt als Grundlage gewählt. Deswegen habe ich keine PRO-Datei als QMAKE-Datei sondern eine inklude Datei die die Endung PRI hat. In dieser Datei habe ich dann zusätzlich zu den vorhandenen Zeilen, die Zeilen für die deutsche Version hinzugefügt. Es ist hier wichtig die erzeugten Dateien in einem seperaten Verzeichnis erzeugen zu lassen weil der aktuelle Inhalt des Verzeichnisses gelöscht wird bevor die neuen Datei erzeugt werden. Wer Interessiert ist kann sich die angepasste Datei &lt;a href=&#39;http://www.juergen-muelbert.de/de/projects/qmake/doc.pri.html&#39;&gt;hier&lt;/a&gt; ansehen.&lt;/p&gt;&lt;p&gt;Das zweite Problem war noch schwieriger zu lösen. Genauso wie bei dem ersten geschilderten Problem habe ich selbst im Web keine verwendbare Lösung gefunden. Es wurde im Kopf der HTML-Datei immer diese Zeilen erzeugt:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;  &lt;br /&gt;&amp;lt;script src=&quot;scripts/jquery.js&quot; &lt;br /&gt;type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src=&quot;scripts/functions.js&quot; &lt;br /&gt;type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sämtliche Änderungen an der Konfigurationsdatei haben nichts geholfen. Ich hatte versucht das ganze mit dem &lt;a href=&#39;http://developer.yahoo.com/yui/&#39;&gt;YUI-Framework&lt;/a&gt; zu realisiern. Aber weder die Änderung der Zeile &lt;code&gt;HTML.stylesheets = classic.css&lt;/code&gt; noch der Zeile &lt;code&gt;HTML.style = &quot;CSS-Code ...&quot;&lt;/code&gt; änderten irgend etwas. Eigentlich hatte ich erwartet hier etwas beeinflussen zu können. Also bei den &lt;a href=&#39;http://de.wikipedia.org/wiki/Cascading_Style_Sheets&#39;&gt;CSS&lt;/a&gt; und &lt;a href=&#39;http://de.wikipedia.org/wiki/JavaScript&#39;&gt;JaveScript&lt;/a&gt; geht hier gar nichts. Aber die Textzeile hinter &lt;code&gt;HTML.postheader&lt;/code&gt;, &lt;code&gt;HTML.postpostheader&lt;/code&gt; und &lt;code&gt;HTML.footer&lt;/code&gt; werden übernommen. Seltsam.&lt;/p&gt;&lt;p&gt;Eine richtige Lösung konnte ich hier nicht finden. Aber das Problem soweit umgehen das ich an dem &lt;a href=&#39;http://www.juergen-muelbert.de/de/projects/jmnsishelper/index.html&#39;&gt;jmnsishelper&lt;/a&gt; wieder weiterarbeiten kann. Ich habe mir den Quellcode von QT4 geladen und die Quellen von dem &lt;code&gt;QDOC-Tool&lt;/code&gt; genauer angesehen. Das Problem ist, die Konfigurationszeilen, die die Stylesheets betreffen werden einfach &lt;strong&gt;nicht&lt;/strong&gt; berücksichtigt. Deswegen ändert sich auch nichts egal was hier steht. Nun kann man so eine schöne aber extra schlichte HTML-Seite nicht oder sehr schlecht in meiner &lt;a href=&#39;http://www.juergen-muelbert.de/&#39;&gt;Web-Präsenz&lt;/a&gt; einbinden. Ich war eigentlich dabei auf das &lt;a href=&#39;http://developer.yahoo.com/yui/&#39;&gt;YUI-Framework&lt;/a&gt; umzustellen. Aber das kann ich jetzt vergessen. Es gibt zwar eine Lösung um eine wirklich nutzbare HTML-Seite zu erzeugen, aber hier wird das &lt;a href=&#39;http://jquery.com/&#39;&gt;jQuery&lt;/a&gt; Skript zugrundegelegt. Der Aufwand mit dem &lt;a href=&#39;http://developer.yahoo.com/yui/&#39;&gt;YUI-Framework&lt;/a&gt; war schon gross und beides will ich nicht. Deswegen zurückrudern und umstellen auf &lt;a href=&#39;http://jquery.com/&#39;&gt;jQuery&lt;/a&gt; und &lt;a href=&#39;http://users.tpg.com.au/j_birch/plugins/superfish/&#39;&gt;Superfish&lt;/a&gt;. Aber nach diesem Ausflug. Diese Zeile erzeugt &lt;code&gt;QDOC&lt;/code&gt; im &lt;code&gt;online&lt;/code&gt; Modus.&lt;/p&gt;&lt;pre&gt;&lt;code&gt; &lt;br /&gt;&amp;lt;link rel=&quot;stylesheet&quot; &lt;br /&gt;type=&quot;text/css&quot; href=&quot;style/style.css&quot; /&amp;gt;&lt;br /&gt;&amp;lt;script src=&quot;scripts/jquery.js&quot; &lt;br /&gt;type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src=&quot;scripts/functions.js&quot; &lt;br /&gt;type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src=&quot;./scripts/superfish.js&quot; &lt;br /&gt;type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;link rel=&quot;stylesheet&quot; &lt;br /&gt;type=&quot;text/css&quot; href=&quot;style/superfish.css&quot; /&amp;gt; &lt;br /&gt;&amp;lt;script src=&quot;./scripts/narrow.js&quot; &lt;br /&gt;type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;link rel=&quot;stylesheet&quot; &lt;br /&gt;type=&quot;text/css&quot; href=&quot;style/narrow.css&quot; /&amp;gt;&lt;br /&gt;&amp;lt;!--[if IE]&amp;gt;&lt;br /&gt;&amp;lt;meta name=&quot;MSSmartTagsPreventParsing&quot; content=&quot;true&quot;&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv=&quot;imagetoolbar&quot; content=&quot;no&quot;&amp;gt;&lt;br /&gt;&amp;lt;![endif]--&amp;gt;&lt;br /&gt;&amp;lt;!--[if lt IE 7]&amp;gt;&lt;br /&gt;&amp;lt;link rel=&quot;stylesheet&quot; &lt;br /&gt;type=&quot;text/css&quot; href=&quot;style/style_ie6.css&quot;&amp;gt;&lt;br /&gt;&amp;lt;![endif]--&amp;gt;&lt;br /&gt;&amp;lt;!--[if IE 7]&amp;gt;&lt;br /&gt;&amp;lt;link rel=&quot;stylesheet&quot; &lt;br /&gt;type=&quot;text/css&quot; href=&quot;style/style_ie7.css&quot;&amp;gt;&lt;br /&gt;&amp;lt;![endif]--&amp;gt;&lt;br /&gt;&amp;lt;!--[if IE 8]&amp;gt;&lt;br /&gt;&amp;lt;link rel=&quot;stylesheet&quot; &lt;br /&gt;type=&quot;text/css&quot; href=&quot;style/style_ie8.css&quot;&amp;gt;&lt;br /&gt;&amp;lt;![endif]--&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body class=&quot;&quot; onload=&quot;CheckEmptyAndLoadList();&quot;&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also deutlich mehr Zeilen. Wie oben bereits angedeutet mit ein paar zusätzlichen &lt;a href=&#39;http://de.wikipedia.org/wiki/Cascading_Style_Sheets&#39;&gt;CSS&lt;/a&gt; und &lt;a href=&#39;http://de.wikipedia.org/wiki/JavaScript&#39;&gt;JaveScript&lt;/a&gt; Dateien. Die hier erzeugten Zeilen sind genauso wie die Zeilen im &lt;code&gt;QDOC creator&lt;/code&gt; Modus vorgegeben und lassen sich nicht ändern. Jetzt wird auch dem Footer etwas hinzugefügt.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;script src=&quot;scripts/functions.js&quot; &lt;br /&gt;type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;!-- &amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;var _gaq = _gaq || [];&lt;br /&gt;_gaq.push([&#39;_setAccount&#39;, &#39;UA-4457116-5&#39;]);&lt;br /&gt;_gaq.push([&#39;_trackPageview&#39;]);&lt;br /&gt;(function() {&lt;br /&gt;var ga = document.createElement(&#39;script&#39;); &lt;br /&gt;ga.type = &#39;text/javascript&#39;; &lt;br /&gt;ga.async = true;&lt;br /&gt;ga.src = (&#39;https:&#39; == document.location.protocol &lt;br /&gt;? &#39;https://ssl&#39; : &#39;http://www&#39;) &lt;br /&gt;+ &#39;.google-analytics.com/ga.js&#39;;&lt;br /&gt;var s = document&lt;br /&gt;.getElementsByTagName(&#39;script&#39;)[0]; &lt;br /&gt;s.parentNode.insertBefore(ga, s);&lt;br /&gt;})();&lt;br /&gt;&amp;lt;/script&amp;gt; --&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Richtig die Zeile mit &lt;code&gt;functions.js&lt;/code&gt; hatten wir im Kopf der Datei bereits. Bemerkenswert finde ich das automatisch der Code für &lt;a href=&#39;http://www.google.com/analytics/&#39;&gt;Google Anlytics&lt;/a&gt; erzeugt wird. Mit dem Account von &lt;a href=&#39;http://qt.nokia.com/&#39;&gt;Nokia-QT&lt;/a&gt;. Klar. Zum Glück aber nur halb so schlimm wie es auf den ersten Blick wirkt. Der Code ist auskommentiert. Den auf dieser Seite angezeigten Code habe ich teilweise neu formartiert damit er in den vorgesehenen Textrahmen passt. Den Code habe ich nicht verändert.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img height=&#39;1&#39; width=&#39;1&#39; src=&#39;https://blogger.googleusercontent.com/tracker/7447108932538900463-151142800993427857?l=juergen-muelbert.blogspot.com&#39;/&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/8065389586873428116/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2011/01/qdoc-nutzen.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/8065389586873428116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/8065389586873428116'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2011/01/qdoc-nutzen.html' title='QDoc nutzen'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-859090791410748055</id><published>2011-01-14T21:59:00.000+01:00</published><updated>2011-10-02T22:21:45.242+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="I18N"/><category scheme="http://www.blogger.com/atom/ns#" term="LINGUIST"/><category scheme="http://www.blogger.com/atom/ns#" term="LRELEASE"/><category scheme="http://www.blogger.com/atom/ns#" term="LUPDATE"/><category scheme="http://www.blogger.com/atom/ns#" term="qmake"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><title type='text'>QMake und Linux Projekte</title><content type='html'>&lt;div xmlns=&#39;http://www.w3.org/1999/xhtml&#39;&gt;&lt;p&gt;Hallo zusammen,&lt;/p&gt;&lt;p&gt;wieder eine Erfahrung mehr mit dem &lt;a target=&#39;_blank&#39; title=&#39;QT-Framework&#39; href=&#39;http://de.wikipedia.org/wiki/Qt_%28Bibliothek%29&#39;&gt;QT-Frameworks&lt;/a&gt;. Das Gute daran ist: &quot;Diese Umgebung gefällt mir jetzt noch besser&quot;.&lt;/p&gt;&lt;p&gt;Ich hatte bereits früher Pakete für Ubuntu geschnürt. Allerdings nur Projekte die auf Java basieren. Da ich mich mehr mit C++ und QT vergnüge habe ich selbstverständlich jetzt auch neue Herausforderungen. Jetzt aktuell wollte ich ein Paket für mein aktuelles Projekt &lt;a target=&#39;_blank&#39; href=&#39;http://www.juergen-muelbert.de/de/projects/jmnsishelper/index.html&#39;&gt;JMNSISHelper&lt;/a&gt; bauen. Das kompilieren ist dank der guten Unterstützung durch &lt;a href=&#39;http://doc.trolltech.com/4.7/qmake-manual.html&#39;&gt;&lt;code&gt;qmake&lt;/code&gt;&lt;/a&gt; kein Problem. Die Reihenfolge &lt;code&gt;qmake &amp;lt;projektname.pro&amp;gt;&lt;/code&gt; gefolgt von make kompiliert das Programm. Zumindest unter Ubuntu lässt sich das Ergebnis jetzt einfach starten und testen. Jetzt haben wir aber erst die erste Hälfte des Weges hinter uns. Das Ziel war ein Paket zu bauen. Mit der Standard &lt;code&gt;qmake.pro&lt;/code&gt; Datei ist das aber unmöglich:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;#-------------------------------------------------&lt;br /&gt;#&lt;br /&gt;# Project created by QtCreator 2010-10-29T21:58:42&lt;br /&gt;#&lt;br /&gt;#-------------------------------------------------&lt;br /&gt;&lt;br /&gt;QT       += core gui&lt;br /&gt;&lt;br /&gt;TARGET = jmnsishelper&lt;br /&gt;TEMPLATE = app&lt;br /&gt;&lt;br /&gt;SOURCES += main.cpp\&lt;br /&gt;mainwindow.cpp \&lt;br /&gt;highlighter.cpp&lt;br /&gt;&lt;br /&gt;HEADERS  += mainwindow.h \&lt;br /&gt;highlighter.h&lt;br /&gt;&lt;br /&gt;FORMS    += mainwindow.ui&lt;br /&gt;&lt;br /&gt;TRANSLATIONS += translations/jmnsishelper_de.ts\&lt;br /&gt;translations/jmnsishelper_es.ts\&lt;br /&gt;translations/jmnsishelper_it.ts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;RESOURCES += \&lt;br /&gt;jmnsishelper.qrc&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Das hilft uns deswegen nicht weil wir Unix-Entwickler im Gegensatz zu den Windows-Leuten eine feste Struktur haben. Wir wollen unsere Programme nicht einmal in &lt;code&gt;\usr\bin\&lt;/code&gt;, dann wieder in &lt;code&gt;\sbin&lt;/code&gt; speichern. Das würde die Zahl der Fans unserer Programme in das uferlose steigen lassen. Deswegen sollte es doch irgendwie möglich sein &lt;a href=&#39;http://doc.trolltech.com/4.7/qmake-manual.html&#39;&gt;&lt;code&gt;qmake&lt;/code&gt;&lt;/a&gt; mitzuteilen, wohin der gute Entwickler sein Produkt installieren will. Es wird wieder niemand wundern, die haben das eingebaut. Denn wenn wir die folgenen Zeilen einfügen:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;# Definition of Target&lt;br /&gt;target.path = /usr/share/jmnsishelper&lt;br /&gt;INSTALLS += target&lt;br /&gt;&lt;br /&gt;# Definition for Data&lt;br /&gt;data.path = /usr/share/jmnsishelper&lt;br /&gt;data.files = data/*&lt;br /&gt;INSTALLS += data&lt;br /&gt;&lt;br /&gt;# Definition for QM&#39;s&lt;br /&gt;qm.path = /usr/share/jmnsishelper&lt;br /&gt;qm.files = build/*.qm&lt;br /&gt;INSTALLS += qm&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;bekommen wir ein schönes &lt;code&gt;Makefile&lt;/code&gt;, das uns die oben genannten Probleme beseitigt. Selbstredend sollte der Projektname &lt;a target=&#39;_blank&#39; href=&#39;http://www.juergen-muelbert.de/de/projects/jmnsishelper/index.html&#39;&gt;JMNSISHelper&lt;/a&gt; durch Ihr eigenes Projekt (den Namen) ersetzt werden. In meinem Programm werden durch den Befehl &lt;code&gt;make install&lt;/code&gt; alle erzeugten Dateien in das Verzeichnis das hinter &lt;code&gt;target.path&lt;/code&gt; oder anders ausgedrückt hinter der jeweiligen &lt;code&gt;*.path&lt;/code&gt;-Zeile angeben ist kopiert. Deswegen ist jetzt die Struktur vorhanden die wir uns weiter oben so sehr gewünscht haben. Die Paket Werkzeuge rufen immer die beiden Befehlsfolgen &lt;a target=&#39;_blank&#39; href=&#39;http://de.wikipedia.org/wiki/Make&#39;&gt;&lt;code&gt;make&lt;/code&gt;&lt;/a&gt; und &lt;a target=&#39;_blank&#39; href=&#39;http://de.wikipedia.org/wiki/Make&#39;&gt;&lt;code&gt;make&lt;/code&gt;&lt;/a&gt; &lt;code&gt;install&lt;/code&gt; auf. Hier findet dann unser &lt;a target=&#39;_blank&#39; href=&#39;https://wiki.ubuntu.com/PackagingGuide/HandsOn&#39;&gt;&lt;code&gt;debuild&lt;/code&gt;&lt;/a&gt; oder &lt;a target=&#39;_blank&#39; href=&#39;https://wiki.ubuntu.com/PackagingGuide/HandsOn&#39;&gt;&lt;code&gt;pbuilder&lt;/code&gt;&lt;/a&gt; schon fast alles was es benötigt. Wir müssen aber in der &lt;code&gt;rules&lt;/code&gt; Datei noch kleine Hilfestellungen geben:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;build-stamp:&lt;br /&gt;dh_testdir&lt;br /&gt;&lt;br /&gt;# Hier die Kommandos zu kompilieren einfügen.&lt;br /&gt;qmake-qt4 -config release&lt;br /&gt;make&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Das &lt;code&gt;build-stamp:&lt;/code&gt; habe ich mitgenommen um zu zeigen wohin der erste Teile gehört. Hier sind die beiden Zeilen nach dem Kommentar &lt;code&gt;# Hier ... &lt;/code&gt; wichtig. Erste Zeile das &lt;code&gt;Makefile&lt;/code&gt; generieren. In der zweiten Zeile wird das Programm gebaut. Dann noch eine Kleinigkeit einfügen: &lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;install:&lt;br /&gt;...&lt;br /&gt;# Hier den Befehl zum installieren des&lt;br /&gt;# Pakets in das Verzeichnis debian/&lt;br /&gt;make INSTALL_ROOT=`pwd`/debian/jmnsishelper install&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Mit diesen Veränderungen konnte ich mein erstes &lt;a target=&#39;_blank&#39; title=&#39;QT4&#39; href=&#39;http://de.wikipedia.org/wiki/Qt_%28Bibliothek%29&#39;&gt;QT4&lt;/a&gt; C++ bauen. Damit meine Bemühungen auch Sinn machen habe ich das dann auch in meinem PPA zur Verfügung gestellt. &lt;/p&gt;&lt;p&gt;Ich freue mich das ich hier weitergekommen bin und überlege mir bereits die nächsten Schritte...&lt;br /&gt;Bis demnächst.&lt;/p&gt;&lt;p&gt;&lt;img height=&#39;1&#39; width=&#39;1&#39; src=&#39;https://blogger.googleusercontent.com/tracker/7447108932538900463-6479487057870531744?l=juergen-muelbert.blogspot.com&#39;/&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/859090791410748055/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2011/01/qmake-und-linux-projekte.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/859090791410748055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/859090791410748055'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2011/01/qmake-und-linux-projekte.html' title='QMake und Linux Projekte'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-360218058384517246</id><published>2011-01-01T19:43:00.000+01:00</published><updated>2011-06-18T11:25:24.694+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="I18N"/><category scheme="http://www.blogger.com/atom/ns#" term="LINGUIST"/><category scheme="http://www.blogger.com/atom/ns#" term="LRELEASE"/><category scheme="http://www.blogger.com/atom/ns#" term="LUPDATE"/><category scheme="http://www.blogger.com/atom/ns#" term="qmake"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><title type='text'>Kompilierung der TS-Dateien mit QMAKE</title><content type='html'>&lt;div xmlns=&#39;http://www.w3.org/1999/xhtml&#39;&gt;&lt;p&gt;Bei dem erzeugen einer ausführbaren Datei ist das QMAKE-Tool des &lt;a target=&#39;_blank&#39; title=&#39;QT-Framework&#39; href=&#39;http://de.wikipedia.org/wiki/Qt_%28Bibliothek%29&#39;&gt;QT-Frameworks&lt;/a&gt; ein sehr hilfreiches Werkzeug. Einmal ehrlich, wer von uns will sich noch ernsthaft damit beschäftigen eine richtige Makefile Datei zu erstellen ?&lt;br /&gt;Die Antwort kann hier nur niemand lauten. Deswegen sind die beiden Werkzeuge &lt;a href=&#39;http://doc.trolltech.com/4.7/qmake-manual.html&#39;&gt;&lt;code&gt;qmake&lt;/code&gt;&lt;/a&gt; und natürlich auch &lt;a target=&#39;_blank&#39; href=&#39;http://www.cmake.org/&#39;&gt;&lt;code&gt;cmake&lt;/code&gt;&lt;/a&gt; sehr hilfreich.&lt;br /&gt;Doch wieder zurück zum Thema. Trotz der Zeilen&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;TRANSLATIONS += translations/jmnsishelper_de.ts\&lt;br /&gt;translations/jmnsishelper_es.ts\&lt;br /&gt;translations/jmnsishelper_it.ts\&lt;br /&gt;translations/jmnsishelper_tr.ts&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;passiert in der Richtung automatisch Übersetzung nicht viel, eher gar nichts. Diese Zeilen machen natürlich wirklich Sinn. Es geht hier darum den beiden Werkzeugen LUPDATE und LRELEASE mitzuteilen wohin die zu übersetzenden Texte zu schreiben sind. Dazu werden mit der Hilfe des Tools LUPDATE die in den SOURCES und FORMS angegebenen Quellen durchsucht. Die hier gefundenen Texte werden dann in die unter TRANSLATIONS angegebenen Dateien geschrieben und können hier mit dem LINGUIST übersetzt werden. Mit dem LRELEASE Tool werden dann die TS-Dateien in QM-Dateien umgewandelt, die dem fertigen Programm die übersetzten Worte und Sätze zur Verfügung stellt.&lt;br /&gt;Schön, habe ich gedacht, wäre es wenn wenigsten die QM-Dateien in dem Release Verzeichnis landen würden. Also wieder einmal durch die leider nur in englisch vorhandene Dokumentation gekämpft. Leider nichts zu finden. Aber das Internet bietet fast für alle Probleme irgendeine Lösung. Hier habe ich ein SNIPPET gefunden das die TS-Dateien in die Release-Version QM-Datei umwandelt. Diese Lösung ist dann auch noch so gut dass wieder ein Schritt automatisch bei dem Bauen des Programms mitgemacht wird. Aber das war mir noch nicht genug. Ich möchte die QM-Dateien auch noch in dem richtigen Verzeichnis haben. Also habe ich mir das SNIPPET genau angeschaut.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;!isEmpty(TRANSLATIONS) {&lt;br /&gt;&lt;br /&gt;isEmpty(QMAKE_LRELEASE) {&lt;br /&gt;win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\lrelease.exe&lt;br /&gt;else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;isEmpty(TS_DIR):TS_DIR = Translations&lt;br /&gt;&lt;br /&gt;TSQM.name = lrelease ${QMAKE_FILE_IN}&lt;br /&gt;TSQM.input = TRANSLATIONS&lt;br /&gt;TSQM.output = $$TS_DIR/${QMAKE_FILE_BASE}.qm&lt;br /&gt;TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN}&lt;br /&gt;TSQM.CONFIG = no_link&lt;br /&gt;QMAKE_EXTRA_COMPILERS += TSQM&lt;br /&gt;PRE_TARGETDEPS += compiler_TSQM_make_all&lt;br /&gt;} else:message(No translation files in project)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;vielen Dank hier an &lt;a href=&#39;http://lists.trolltech.com/qt-interest/2008-01/thread00516-0.html&#39;&gt;Qt-interest Archive&lt;/a&gt;. Ich habe diese Zeile in meine QMAKE Projektdatei eingefügt und zu erst einmal getestet was hier passiert. Das Ergebnis war gut aber nicht perfekt. Die QM-Dateien wurden im gleichen Verzeichnis erzeugt in dem die TS-Dateien bereits vorhanden waren :-(&lt;br /&gt;Also ein paar kleine Änderungen:&lt;br /&gt;Das Verzeichnis Translations ist bei meinem Projekt komplett klein geschrieben. Hier die erste Anpassung: &lt;code&gt;isEmpty(TS_DIR):TS_DIR = translations&lt;/code&gt;.&lt;br /&gt;Als nächstes die QM-Dateien noch in das richtige Verzeichnis. Dazu muss die Zeile in der das LRELEASE-Tool aufgerufen wird erweitert werden. Die neue geänderte Zeile sieht jetzt so aus: &lt;code&gt;TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} -qm $$DESTDIR/${QMAKE_FILE_BASE}.qm&lt;/code&gt;. Durch die Erweiterung &lt;code&gt;-qm [Datei]&lt;/code&gt; wird LRELEASE mitgeteilt das Ergebnis nicht einfach an den gleichen Ort abzuspeichern wie die Quelle, sondern in der angegebenen Datei. Das Ergebnis kann sich sehen lassen:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&#39;http://1.bp.blogspot.com/_DtQT1t1sVgk/TR91D7eMP2I/AAAAAAAAAhg/qLf2IWeTL_4/s1600/2011-01-01_193732.jpg&#39;&gt;&lt;img height=&#39;58&#39; width=&#39;320&#39; src=&#39;http://1.bp.blogspot.com/_DtQT1t1sVgk/TR91D7eMP2I/AAAAAAAAAhg/qLf2IWeTL_4/s320/2011-01-01_193732.jpg&#39;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img height=&#39;1&#39; width=&#39;1&#39; src=&#39;https://blogger.googleusercontent.com/tracker/7447108932538900463-1293070559354595298?l=juergen-muelbert.blogspot.com&#39;/&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/360218058384517246/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2011/01/kompilierung-der-ts-dateien-mit-qmake.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/360218058384517246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/360218058384517246'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2011/01/kompilierung-der-ts-dateien-mit-qmake.html' title='Kompilierung der TS-Dateien mit QMAKE'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_DtQT1t1sVgk/TR91D7eMP2I/AAAAAAAAAhg/qLf2IWeTL_4/s72-c/2011-01-01_193732.jpg" height="72" width="72"/><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-1753337417279002064</id><published>2010-12-24T00:15:00.001+01:00</published><updated>2011-07-05T21:04:20.262+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Assistant"/><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="I18N"/><category scheme="http://www.blogger.com/atom/ns#" term="Opensource"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><category scheme="http://www.blogger.com/atom/ns#" term="QTHelp"/><title type='text'>QTHelp oder QTAssistant für I18N-Hilfe</title><content type='html'>Hallo zusammen,&lt;br /&gt;&lt;br /&gt;hier wieder einmal ein Problem das sich mir gestellt hatte und ich dann lösen konnte.&lt;br /&gt;&lt;br /&gt;Es geht wieder einmal um die Internationalisierung. In diesem Fall einmal nicht um Teile des Programmes, sondern um die Hilfe oder Anleitung. Ich habe bereits in vorherigen Artikeln begeistert geschrieben dass QT hier komplett ist. Deswegen ist auch ein Tool dabei um Hilfeseiten oder sogar Kontext bezogene Hilfe anzeigen zu können. Das ist toll und funktioniert sehr gut bei reinen englischen Texten. Oder Sie verzichten auf englisch und machen gleich alles auf deutsch. Das ist aber nicht so prickelnd.&lt;br /&gt;&lt;br /&gt;Als ich auf diese Problematik gestoßen bin habe ich erst einmal im Netz gesucht, aber keine Lösung gefunden. Deswegen habe ich dann selbst das Problem beseitigt. &lt;br /&gt;&lt;br /&gt;Die komprimierte Hilfedatei muss für jede Sprache für die das Programm zur Verfügung gestellt wird extra kompiliert werden. Jetzt muss natürlich dem Assistant mitgeteilt werden wie der an die &quot;richtige&quot; Sprache kommt. Dazu habe ich dafür gesorgt das die Lokalisierung, auf der der Computer läuft mit übergeben wird:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;bool Assistant::startAssistant(const QString &amp;amp;locale) {&lt;br /&gt;QString country = locale.left(2);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Die Begrenzung auf nur zwei Zeichen für die Lokalisierung hat den Vorteil dass man sich spart für jedes Land mit der gleichen Sprache ein extra Hilfedatei bereitzustellen. (de_DE, de_AT usw...).&lt;br /&gt;Jetzt muss natürlich noch geprüft werden ob die Hilfedatei existiert. Wenn das der Fall ist kann diese geladen werden. Es soll vorkommen das Projekte (Programme) in vielen Sprachen bereitgestellt werden. Deswegen ist es sicher öfters so dass die Hilfe und Anleitung nicht für alle Sprachen bereitsteht. Hier stehen zwei oder sogar drei Möglichkeiten zur Reaktion frei.&lt;br /&gt;&lt;br /&gt;1. Es wird eine Fehlermeldung ausgegeben. &lt;code&gt;Die Hilfe steht für Ihre Sprache nicht zur Verfügung.&lt;/code&gt;. Der Benutzer muss halt damit leben.&lt;br /&gt;&lt;br /&gt;2. Es wird keine Fehlermeldung ausgegeben und einfach die grundlegenden (meistens englische) Hilfe und Anleitung geladen.&lt;br /&gt;&lt;br /&gt;3. Es wird eine Fehlermeldung ausgegeben. &lt;code&gt;Die Hilfe steht für Ihre Sprache nicht zur Verfügung. Es kann aber die englische Hilfe geladen werden.&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Die Fehler und Hinweistexte sind dann selbstverständlich in der Sprache des Anwenders angezeigt. Ach ja ich bevorzuge die dritte Möglichkeit und werde den entsprechenden Code in diesem Betrag ergänzen.</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/1753337417279002064/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2010/12/qthelp-oder-qtassistant-fur-i18n-hilfe.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/1753337417279002064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/1753337417279002064'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2010/12/qthelp-oder-qtassistant-fur-i18n-hilfe.html' title='QTHelp oder QTAssistant für I18N-Hilfe'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-8511418713905018439</id><published>2010-12-14T19:21:00.000+01:00</published><updated>2011-06-18T11:28:31.836+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="qmake"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><category scheme="http://www.blogger.com/atom/ns#" term="QTCreator"/><title type='text'>QTCreator kann keine Unterverzeichnisse</title><content type='html'>Hallo liebe Leserinnen und Leser,&lt;br /&gt;&lt;br /&gt;ich arbeite gerade an einem QT Projekt, dem &lt;a href=&quot;http://www.juergen-muelbert.de/jmnsishelper/&quot;&gt;JMNSISInstaller&lt;/a&gt;. Ich wollte von Anfang an allzu großes Chaos vermeiden. Deswegen habe ich gedacht, ich könnte hier auch mit Unterverzeichnissen arbeiten. Ich kannte es so aus meiner bisherigen Erfahrung mit &lt;a href=&quot;http://www.java.com/&quot;&gt;JAVA&lt;/a&gt;. Das Programm &lt;code&gt;&lt;a href=&quot;http://doc.trolltech.com/4.7/qmake-manual.html&quot;&gt;qmake&lt;/a&gt;&lt;/code&gt; bietet diese Möglichkeit schließlich auch. Also sollte das kein Problem sein. Falsch gedacht.&lt;br /&gt;Die Einstellung vom &lt;code&gt;&lt;a href=&quot;http://qt.nokia.com/products/developer-tools/&quot;&gt;QTCreator&lt;/a&gt;&lt;/code&gt; bieten hier keine Lösung für diese Idee. Da ich mich ein wenig mit &lt;code&gt;&lt;a href=&quot;http://doc.trolltech.com/4.7/qmake-manual.html&quot;&gt;qmake&lt;/a&gt;&lt;/code&gt; beschäftigt hatte war es kein Problem die Projekt &lt;code&gt;.pro&lt;/code&gt; Datei ein wenig anzupassen. Danach funktioniert das kompilieren und linken des Projekts ohne Probleme. Aber die Quelldateien müssen dem Projekt erst wieder bekannt gemacht werden. Nach diesem Schritt sieht es so aus als ob alles gut sein sollte...&lt;br /&gt;Wie aus den Worten des letzen Absatzes zu erwarten war ist dem nicht so. Kommt man jetzt auf die aberwitzige Idee dem Projekt eine zusätzliche Klasse, also Datei, zu spendieren gibt es eine Überraschung. Die neue Datei landet nicht im dem dafür vorgesehenen &lt;code&gt;src&lt;/code&gt; oder &lt;code&gt;ui&lt;/code&gt; Verzeichnis. Sie wird wieder an der alte früher dafür vorgesehenen Stelle dem Wurzelverzeichnis erzeugt.&lt;br /&gt;Deswegen &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;QT Framework&lt;/a&gt; kann es, der &lt;code&gt;&lt;a href=&quot;http://qt.nokia.com/products/developer-tools/&quot;&gt;QTCreator&lt;/a&gt;&lt;/code&gt; &lt;i&gt;(noch)&lt;/i&gt; nicht. Ich habe die Änderungen in der Projekt &lt;code&gt;.pro&lt;/code&gt; Datei wieder rückgängig gemacht. Bis es von &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;QT Nokia&lt;/a&gt; hier eine bessere Lösung gibt werde ich mit vielen Dateien im Wurzelverzeichnis arbeiten.</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/8511418713905018439/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2010/12/qtcreator-kann-keine-unterverzeichnisse.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/8511418713905018439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/8511418713905018439'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2010/12/qtcreator-kann-keine-unterverzeichnisse.html' title='QTCreator kann keine Unterverzeichnisse'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-5955153907403187961</id><published>2010-11-21T13:45:00.000+01:00</published><updated>2011-06-18T11:28:54.416+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="jmnsishelper"/><category scheme="http://www.blogger.com/atom/ns#" term="NSIS"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><title type='text'>Aus QT4 Programme starten</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;Hallo,&lt;br /&gt;hier mein nächster Erfahrungsbericht über die Programmentwicklung mit dem QT-Framework.&lt;br /&gt;Ich habe damit begonnen ein Programm mit dem QT4 Framework zu schreiben. Ziel dieses Programms ist es die Entwickung von NSIS Installer-Skripten zu unterstützen. Die Fortschritte und Entwicklung dieses Programms kann auf der &lt;a href=&quot;http://www.juergen-muelbert.de/jmnsishelper/&quot;&gt;Projektseite&lt;/a&gt; verfolgt werden.&lt;br /&gt;Doch nun zu dem Thema. Wie startet man eigentlich ein Programm aus einem laufenden anderen Programm mit dem QT-Framework? Richtig da gibt es eine Klasse dafür. Also einfach: &lt;br /&gt;&lt;code&gt;QProcess System_Call; &lt;/code&gt;&lt;br /&gt;&lt;code&gt;System_Call.start(&quot;notepad.exe&quot;);&lt;/code&gt;&lt;br /&gt;hilft nicht wirklich. Hier muss schon ein etwas größerer Aufwand betrieben werden. Ich habe mich auch erst einmal im Netz umsehen müssen bevor ich mein Ziel erreicht hatte. &lt;br /&gt;Als erstes ist der komplette Pfad der Datei hilfreich. Also &lt;code&gt;C:\programme\nsis\makensis.exe&lt;/code&gt; oder &lt;code&gt;/usr/bin/makensis&lt;/code&gt; hat bei mir funktioniert. Ohne den Pfad hatte der Computer keine Lust das externe Programm zu starten. Jetzt kommt natürlich noch eine kleines aber nicht unwichtiges Detail. Wurde das Programm das ich aufgerufen hatte ausgeführt, wenn ja fehlerfrei ? &lt;br /&gt;Um das auch noch sicherzustellen muss der Programmkode erweitert werden:&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;br /&gt;&lt;code&gt; if( System_Call.waitForStarted() == false ) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; qDebug(&quot;error&quot;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; QMessageBox::warning(this, tr(&quot;JMNSisHelper&quot;),&lt;/code&gt;&lt;br /&gt;&lt;code&gt; tr(&quot;Error compiling the script %1\n.&quot;)&lt;/code&gt;&lt;br /&gt;&lt;code&gt; .arg(curFile));&lt;/code&gt;&lt;br /&gt;&lt;code&gt; } else {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; System_Call.waitForFinished();&lt;/code&gt;&lt;br /&gt;&lt;code&gt; QByteArray X = System_Call.readAllStandardOutput();&lt;/code&gt;&lt;br /&gt;&lt;code&gt; qDebug(X.constData());&lt;/code&gt;&lt;br /&gt;&lt;code&gt; QByteArray Y = System_Call.readAllStandardError();&lt;/code&gt;&lt;br /&gt;&lt;code&gt; qDebug(Y.constData());&lt;/code&gt;&lt;br /&gt;&lt;code&gt; QMessageBox::warning(this, tr(&quot;JMNSisHelper&quot;),&lt;/code&gt;&lt;br /&gt;&lt;code&gt; tr(&quot;Error compiling the script %1.\n\n%2&quot;)&lt;/code&gt;&lt;br /&gt;&lt;code&gt; .arg(curFile)&lt;/code&gt;&lt;br /&gt;&lt;code&gt; .arg(X.constData()));&lt;/code&gt;&lt;br /&gt;&lt;code&gt; }&lt;/code&gt;&lt;br /&gt;Das ist ein Codeausschnitt aus dem oben erwähnten Programm &lt;a href=&quot;http://www.juergen-muelbert.de/jmnsishelper/&quot;&gt;Projektseite&lt;/a&gt;. Hier ist zu erkennen das es eine Abfrage gibt ob das externe Programm gestartet werden konnte. Wenn hier ein Fehler auftritt wird ein entsprechende Meldung ausgegeben. Am Schluß, nach dem das Programm fertig ist wird dann nochmal eine Meldung ausgegeben.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/5955153907403187961/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2010/11/aus-qt4-programme-starten.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/5955153907403187961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/5955153907403187961'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2010/11/aus-qt4-programme-starten.html' title='Aus QT4 Programme starten'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-2967104364222614135</id><published>2010-11-04T11:56:00.001+01:00</published><updated>2011-10-02T22:26:01.885+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JAVA"/><category scheme="http://www.blogger.com/atom/ns#" term="NSIS"/><category scheme="http://www.blogger.com/atom/ns#" term="Opensource"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><title type='text'>NSIS Installer für QT Projekte</title><content type='html'>Hallo,&lt;br /&gt;wie ich in dem letztem Beitrag versprochen habe, gehe ich diesmal intensiv auf das Thema &lt;a href=&quot;http://nsis.sourceforge.net/Main_Page&quot; target=&quot;_blank&quot; title=&quot;NSIS&quot;&gt;NSIS&lt;/a&gt; Installer ein. Der &lt;a href=&quot;http://nsis.sourceforge.net/Main_Page&quot; target=&quot;_blank&quot; title=&quot;NSIS&quot;&gt;NSIS&lt;/a&gt; (Nullsoft Scriptable Install System) ist sehr vielseitig konfigurierbar und deswegen können die &lt;a href=&quot;http://de.wikipedia.org/wiki/Skriptsprache&quot; target=&quot;_blank&quot; title=&quot;Skripte&quot;&gt;Skripte&lt;/a&gt; groß werden. Ich habe mich mit diesem Thema jetzt beschäftigt und ein erstes Skript geschrieben, mit Anregungen von vorhandenen Install-Skripten, mit dem das Erstellen von Setup.exe erleichtert werden soll.&lt;br /&gt;Das habe ich versucht zu erreichen in dem ich an dem Anfang dieses Skriptes mit viel Variablen arbeite. Doch jetzt genug der Einführung, hier das Skript mit den zugehörigen Erklärungen.&lt;br /&gt;Der Installer ist wieder für das Adressbuch Beispiel aus &lt;a href=&quot;http://de.wikipedia.org/wiki/Qt_%28Bibliothek%29&quot; target=&quot;_blank&quot; title=&quot;QT&quot;&gt;Qt&lt;/a&gt;.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;!define PRODUCT_NAME &quot;AddressBookSample&quot;&lt;br /&gt;Name &quot;${PRODUCT_NAME}&quot;&lt;br /&gt;!define EXE_NAME &quot;part2.exe&quot;&lt;br /&gt;!define PRODUCT_VERSION &quot;0.2&quot;&lt;br /&gt;!define VER_MAJOR 0&lt;br /&gt;!define VER_MINOR 2&lt;br /&gt;!define VER_REVISION 2&lt;br /&gt;!define VER_BUILD 10&lt;br /&gt;!define PRODUCT_PUBLISHER &quot;Jürgen Mülbert&quot;&lt;br /&gt;!define PRODUCT_WEBSITE &lt;br /&gt;             &quot;http://www.juergen-muelbert.de&quot;&lt;br /&gt;!define PRODUCT_SUPPORT_SITE &lt;br /&gt;             &quot;http://www.juergen-muelbert.de/support.html&quot;&lt;br /&gt;!define PRODUCT_DIR_REGKEY &lt;br /&gt;             &quot;Software\Microsoft\Windows\CurrentVersion\&lt;br /&gt;              App Paths\${EXE_NAME}&quot;&lt;br /&gt;!define PRODUCT_UNINST_KEY &lt;br /&gt;             &quot;Software\Microsoft\Windows\CurrentVersion\&lt;br /&gt;              Uninstall\${PRODUCT_NAME}&quot;&lt;br /&gt;!define REG_KEY &quot;SOFTWARE\$(^NAME)&quot;&lt;br /&gt;!define INSTALL_ROOT_KEY HKLM&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Die meisten oben gezeigten Definitionen erklären sich selbst.&lt;a href=&quot;http://de.wikipedia.org/wiki/Registrierungsdatenbank&quot; title=&quot;HKLM&quot;&gt;HKLM&lt;/a&gt; ist der RegistryKey für die &quot;lokale Maschine&quot;. Ansonsten gleich weiter...&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;;--------------------------------&lt;br /&gt;;Configuration&lt;br /&gt;Caption &quot;${PRODUCT_NAME} ${PRODUCT_VERSION} Setup&quot;&lt;br /&gt;BrandingText &quot; © Jürgen Mülbert &quot;&lt;br /&gt;!ifdef OUTFILE&lt;br /&gt;OutFile &quot;${OUTFILE}&quot;&lt;br /&gt;!else&lt;br /&gt;OutFile &lt;br /&gt;   ..\${PRODUCT_NAME}-${PRODUCT_VERSION}-setup.exe&lt;br /&gt;!endif&lt;br /&gt;;Installer attributes&lt;br /&gt;InstallDir $PROGRAMFILES\${PRODUCT_NAME}&lt;br /&gt;InstallDirRegKey &lt;br /&gt;  ${INSTALL_ROOT_KEY} &quot;${PRODUCT_DIR_REGKEY}&quot; &quot;&quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Wie hier in dem oben genannten Text zu sehen ist wird bereits bei der Konfiguration ausgiebig auf definierten Konstanten zugegriffen. Das zieht sich durch die gesamte Datei wie wir am nächsten Beispiel sehen werden.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;;--------------------------------&lt;br /&gt;;Installer Sections&lt;br /&gt;Section !$(secmain) secmain&lt;br /&gt;&lt;br /&gt;SetDetailsPrint textonly&lt;br /&gt;DetailPrint &quot;Installing ${PRODUCT_NAME} Core Files...&quot;&lt;br /&gt;SetDetailsPrint listonly&lt;br /&gt;SectionIn 1 2 3 RO&lt;br /&gt;SetShellVarContext all&lt;br /&gt;SetOutPath $INSTDIR&lt;br /&gt;SetOverwrite on&lt;br /&gt;File ${EXE_NAME}&lt;br /&gt;File changelog.txt&lt;br /&gt;File libgcc_s_dw2-1.dll&lt;br /&gt;File mingwm10.dll&lt;br /&gt;File QtCore4.dll&lt;br /&gt;File QtGui4.dll&lt;br /&gt;File addressbook_de.qm&lt;br /&gt;&lt;br /&gt;WriteRegStr ${INSTALL_ROOT_KEY} &quot;${REG_KEY}\Components&quot; sec_main 1&lt;br /&gt;SectionEnd&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Hier ist als letztes Beispiel die Hauptsektion aufgeführt. In diesem Abschnitt werden alle notwendigen Komponenten installiert damit das Programm überhaupt laufen kann. Wie hier schön zu sehen ist taucht als Variable der &lt;code&gt;PRODUCT_NAME&lt;/code&gt; auf. Der wird zwar nur für das Detailprotokoll verwendet, aber immerhin. Die &lt;code&gt;INSTALLDIR&lt;/code&gt; wurde schließlich auch mit dem &lt;code&gt;PRODUCT_NAME&lt;/code&gt; initialisiert und das viel weiter oben. Übrigens der Befehl &lt;code&gt;SetShellVarContext&lt;/code&gt; legt mit der Option all fest das diese Installation für alle Benutzer dieses Computer durchgeführt wird. &lt;code&gt;SetOverwrite on&lt;/code&gt; bewirkt alle vorhandenen Dateien werden durch die Dateien im Installationsarchiv überschrieben. Die nächste benutzte Variable ist &lt;code&gt;EXE_NAME&lt;/code&gt;, die einfach den Namen des ausführbaren Programms enthält. Der Inhalt der Datei &lt;code&gt;changelog.txt&lt;/code&gt; wird nach der Installation angezeigt:&lt;br /&gt;&lt;code&gt;!define MUI_FINISHPAGE_SHOWREADME $INSTDIR\changelog.txt&lt;/code&gt;&lt;br /&gt;&lt;code&gt;!define MUI_FINISHPAGE_SHOWREADME_TEXT changelog.txt&lt;/code&gt;&lt;br /&gt;Die &lt;a href=&quot;http://de.wikipedia.org/wiki/Dynamic_Link_Library&quot; target=&quot;_blank&quot; title=&quot;DLL&#39;s&quot;&gt;DLL&#39;s&lt;/a&gt; sind notwendig. Das sind die zwei &lt;a href=&quot;http://de.wikipedia.org/wiki/Dynamic_Link_Library&quot; target=&quot;_blank&quot; title=&quot;DLL&#39;s&quot;&gt;DLL&#39;s&lt;/a&gt; mit dem QT kompiliert wurde. Ohne die benutzten Qt-Bibliotheken würde es natürlich auch nicht funktionieren. Am Ende der Dateiliste steht noch die Übersetzungsdatei für die deutschen Texte des Adressbuch Beispiels. Zum Schluß dieses Abschnitts wird noch in die &lt;a href=&quot;http://de.wikipedia.org/wiki/Registrierungsdatenbank&quot; target=&quot;_blank&quot; title=&quot;Windows-Registry&quot;&gt;Windows-Registry&lt;/a&gt; geschrieben das die Hauptkomponente installiert wurden.&lt;br /&gt;Wie gesagt das zieht sich so durch das gesamte Skript, das mit diesem &lt;a href=&quot;http://www.juergen-muelbert.de/de/projects/nsis/setup_0.2.nsi.html&quot;&gt;Link&lt;/a&gt; vollständig zu sehen ist. Auf meiner Website gibt es jetzt die Projekte &lt;a href=&quot;http://www.juergen-muelbert.de/de/projects/jmnsishelper/index.html&quot;&gt;JMNSISHelper&lt;/a&gt; und &lt;a href=&quot;http://www.juergen-muelbert.de/de/projects/nsis4java/index.html&quot;&gt;NSIS4Java&lt;/a&gt; zu diesem Thema.</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/2967104364222614135/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2010/11/nsis-installer-fur-qt-projekte.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/2967104364222614135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/2967104364222614135'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2010/11/nsis-installer-fur-qt-projekte.html' title='NSIS Installer für QT Projekte'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-3246515003626845195</id><published>2010-10-17T20:06:00.000+02:00</published><updated>2012-03-24T16:24:10.496+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="I18N"/><category scheme="http://www.blogger.com/atom/ns#" term="LINGUIST"/><category scheme="http://www.blogger.com/atom/ns#" term="LRELEASE"/><category scheme="http://www.blogger.com/atom/ns#" term="LUPDATE"/><category scheme="http://www.blogger.com/atom/ns#" term="NSIS"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><category scheme="http://www.blogger.com/atom/ns#" term="QTCreator"/><title type='text'>QT Projekte internationalisieren</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;div align=&quot;left&quot;&gt;Eine interessante Frage stellte sich durch Zufall recht früh. Das Thema Internationalisierung. Ich arbeite zum Kennenlernen das &lt;a href=&quot;http://de.wikipedia.org/wiki/Qt_%28Bibliothek%29&quot; target=&quot;_blank&quot; title=&quot;QT-Framework&quot;&gt;QT-Frameworks&lt;/a&gt; das Adressbuch Beispiel (Tutorial) durch. Bereits im zweiten Kapitel tauchte die Zeile: &lt;code&gt;setWindowTitle(tr(&quot;Simple Address Book&quot;));&lt;/code&gt; auf. Nun gut, ich hatte mich schon einmal mit QT beschäftigt. Deswegen ist mir bekannt, die Zeichenfolge &lt;code&gt;tr(&quot;text&quot;)&lt;/code&gt; bedeutet: Der Text &quot;text&quot; soll internationalisiert werden. Also habe ich an dieser Stelle gleich einmal den Kurs verlassen und mich mit diesem Thema auseinandergesetzt.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Also wie funktioniert das und ist ein einfach oder umständlich?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Es ist wirklich einfach ein Programm zu schreiben und dieses an verschiedene Spracheräume anzupassen.&lt;br /&gt;Als erstes muss in der Projekt.pro Datei die Zeile &lt;code&gt;TRANSLATIONS = programm_de.ts programm_es.ts&lt;/code&gt; hinzugefügt werden. Wobei der Name &quot;programm&quot; für den Namen der erzeugten Sprachdatei steht. Die Erweiterung &quot;_de&quot;,&amp;nbsp; &quot;_es&quot; oder eine beliebige andere gültige Spracherweiterung sorgt dafür dass später die Lokalisierung erfolgen kann. Normalerweise sollten die &quot;.ts&quot; Dateien beim build-Prozess automatisch&amp;nbsp; aktualisiert werden. Bis jetzt ist mir das mit dem QTCreator unter Windows noch nicht gelungen. Es geht aber auch von Hand. In dem Projekt Verzeichnis des QT-Befehl &lt;code&gt;lupdate&lt;/code&gt; aufrufen. Dieser Befehl bringt alle &quot;.ts&quot; Dateien, die in der &lt;code&gt;Projekt.pro&lt;/code&gt; stehen auf den neuesten Stand. Das bedeutet die &quot;c++&quot;-Quelldateien werden auf die weiter oben erwähnten &lt;code&gt;tr()&lt;/code&gt; Zeichenfolgen überprüft. Wenn so etwas gefunden wird wandert das in die Sprach-Quelldateien. Aber das ist noch nicht alles. Es werden natürlich auch die Formular-Quellen &quot;.ui&quot; auf Texte untersucht. Auch die hier gefundenen Texte wandern in die Sprach-Quelldateien.&lt;br /&gt;&lt;br /&gt;Diese Sprach-Quelldatei(en) werden dann mit dem &lt;code&gt;QTLinguist&lt;/code&gt; bearbeitet. Vollständig und als gültig erklärte Texte werden dann später in dem ausgeführten Programm auch lokalisiert angezeigt.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_DtQT1t1sVgk/TLszNTnNMiI/AAAAAAAAAf8/GtLCmf6e-Jg/s1600/QTLinguist_allc.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img height=&quot;95&quot; src=&quot;http://2.bp.blogspot.com/_DtQT1t1sVgk/TLszNTnNMiI/AAAAAAAAAf8/GtLCmf6e-Jg/s320/QTLinguist_allc.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In dem oben gezeigten Beispiel sind überall grüne Haken zu sehen. Das bedeutet alle Texte für diese Anwendung sind komplett übersetzt. Sollte hier außer der grünen Haken auch ein Ausrufe- oder ein Frage-Zeichen zu sehen sein, so wird der so gekennzeichnete Text später in der Sprache ausgegeben werden, in der der Programmierer den Originaltext hinterlegt hat. Die Originaltexte der meisten Programme werden in englisch hinterlegt und später übersetzt. Das ist selbstverständlich auch gut so, denn ist ein Programm nicht vollständig übersetzt, wird zumindest dann der Originaltext ausgegeben. Das erspart uns leere Schaltflächen oder Textfelder vor denen keine Erklärung steht.&lt;br /&gt;&lt;br /&gt;Die so bearbeiteten Sprach-Quelldateien müssen aber noch kompiliert werden. Das erledigt das Werkzeug &lt;code&gt;lrelease&lt;/code&gt; für uns. Auch hier hilft die &lt;code&gt;Projekt.pro&lt;/code&gt;-Datei wieder. Alle Sprach-Quellen, die hier aufgeführt sind werden auch kompiliert. Ein einzelne Datei kann aber auch über den &lt;code&gt;QTLinguist&lt;/code&gt; direkt kompiliert werden. Hier gibt es in dem Datei-Menü den Befehl &quot;Freigeben&quot; oder &quot;Freigeben als...&quot;. Das bedeutet schließlich nichts anderes als der Befehl &lt;code&gt;lrelease&lt;/code&gt;.&lt;br /&gt;Jetzt sollte alles funktionieren, aber ess fehlt noch etwas. Die kompilierten Sprachdatei ist in das Verzeichnis in der sich das Programm befindet kopiert, trotzdem klappt es nicht. Woran liegt es ?&lt;br /&gt;Ganz einfach unserem lieben Programm haben wir noch garnicht mitgeteilt: &quot;Jetzt kannst du mehrere Sprachen&quot;. Das holen wir jetzt ganz schnell nach. Das funktioniert, mich wundert es langsam nicht mehr, bei dem &lt;a href=&quot;http://de.wikipedia.org/wiki/Qt_%28Bibliothek%29&quot;&gt;QT-Frameworks&lt;/a&gt; ganz einfach. Vier zusätzliche Programmzeilen in der &lt;code&gt;main.cpp&lt;/code&gt; Datei helfen hier:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;QString locale = QLocale::system().name();&lt;br /&gt;QTranslator translator;&lt;br /&gt;translator.load(QString(&quot;addressbook_&quot;) + locale);&lt;br /&gt;a.installTranslator(&amp;amp;translator); &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Diese vier Zeile holen die lokalen Einstellungen unter der dieser Computer seine Arbeit tut. Dann wird die für diese Einstellung richtige Sprachdatei geholt, falls vorhanden. Zu Schluß bekommt die&amp;nbsp;&lt;code&gt; QApplication&lt;/code&gt; noch mitgeteilt: Es gibt eine Übersetzung. Nach diesen Änderungen das Programm neu erstellen. Dann ein neuer Test. Es funktioniert.&lt;br /&gt;Allerdings nicht direkt aus dem &lt;code&gt;QTCreator&lt;/code&gt;. Hier gibt es anscheinend noch ein paar spezielle Einstellung die das verhindern. Das schaue ich mir später nochmal an...&lt;br /&gt;Ich habe dann auch versucht den Installer zu internationalisieren. Also anscheinend ist das bei der MS Umgebung nicht vorgesehen. Das hat mich dazu bewegt mich wieder ganz schnell von &lt;a href=&quot;http://wixedit.sourceforge.net/&quot; target=&quot;_blank&quot; title=&quot;WiXEdit&quot;&gt;WiXEdit&lt;/a&gt; und &lt;a href=&quot;http://de.wikipedia.org/wiki/Windows_Installer&quot; title=&quot;MS Installer Pakete&quot;&gt;MS Installer Pakete &lt;/a&gt;zu verabschieden. Also willkommen zurück &lt;a href=&quot;http://de.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System&quot; title=&quot;NSIS&quot;&gt;NSIS&lt;/a&gt;, das auch als Installer für QT verwendet wird. Dazu mehr demnächst...&lt;br /&gt;&lt;img height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/7447108932538900463-6339169312665340853?l=juergen-muelbert.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/3246515003626845195/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2010/10/qt-projekte-internationalisieren.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/3246515003626845195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/3246515003626845195'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2010/10/qt-projekte-internationalisieren.html' title='QT Projekte internationalisieren'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_DtQT1t1sVgk/TLszNTnNMiI/AAAAAAAAAf8/GtLCmf6e-Jg/s72-c/QTLinguist_allc.jpg" height="72" width="72"/><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry><entry><id>tag:blogger.com,1999:blog-4333452232975601150.post-7509344533124902868</id><published>2010-10-13T22:18:00.000+02:00</published><updated>2011-06-18T11:29:31.975+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="QT"/><category scheme="http://www.blogger.com/atom/ns#" term="QT4"/><title type='text'>Programmieren mit QT</title><content type='html'>Hallo zusammen,&lt;br /&gt;&lt;br /&gt;nach längerer Zeit wieder einmal etwas neues hier.&lt;br /&gt;&lt;br /&gt;Ich ware lange Zeit ein &lt;a href=&quot;http://www.java.com/&quot;&gt;JAVA&lt;/a&gt; Fan. Nichts ging über &lt;a href=&quot;http://www.java.com/&quot;&gt;JAVA&lt;/a&gt;, bis vor kurzem. Ich habe versucht mit der Hilfe des  &lt;a href=&quot;http://kenai.com/projects/bsaf/pages/Home&quot;&gt;BSAF&lt;/a&gt; eine Anwendung zu schreiben. Außer viel ärgern hat das nichts bewirkt.&lt;br /&gt;Deswegen ganz etwas anderes. Die erste Idee war &quot;Probiere doch einfach einmal &lt;a href=&quot;http://www.mono-project.com/&quot;&gt;Mono&lt;/a&gt; oder das &lt;a href=&quot;http://www.microsoft.com/net/&quot;&gt;Microsift NET Framework&lt;/a&gt;. Aber irgendwie kann ich mich im Moment damit nicht anfreunden. Außerdem bin ich &lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;UBUNTU&lt;/a&gt; Fan, habe einen &lt;a href=&quot;https://launchpad.net/%7Ejmuelbert&quot;&gt;Launchpad&lt;/a&gt; Account, bin Ubuntero und habe bereits Projekte in &lt;a href=&quot;http://revu.ubuntuwire.com/&quot;&gt;REVU&lt;/a&gt; gestellt. In &lt;a href=&quot;http://www.linux.de/&quot;&gt;LINUX&lt;/a&gt; wird eigentlich nur eine Programmiersprache richtig akzeptiert. Das ist C bzw. C++.&lt;br /&gt;Deswegen habe ich mit jetzt für das &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;QT Framework&lt;/a&gt;&amp;nbsp;entschieden. Die ersten Versuch waren in der Windows Umgebung sehr vielversprechend. Es ist hier überraschend mit wie mit wenigen Zeilen bereits ein funktionierendes Mini-Programm zu erstellen ist.&lt;br /&gt;Als erstes werde ich jetzt einmal das mitgelieferte Adressbuch-Beispiel eingeben und testen. Dann werde ich versuchen dieses Beispiel zu internationalisieren.&lt;br /&gt;Mit diesem paar Dateien:&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_DtQT1t1sVgk/TLYRMxyccxI/AAAAAAAAAfo/XZWL7a3gRFo/s1600/part1_files.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;103&quot; src=&quot;http://2.bp.blogspot.com/_DtQT1t1sVgk/TLYRMxyccxI/AAAAAAAAAfo/XZWL7a3gRFo/s320/part1_files.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Lässt sich bereits das erzeugen:&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_DtQT1t1sVgk/TLYS7F4oyQI/AAAAAAAAAfs/fVvi3ZnR-qI/s1600/part1_window.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;260&quot; src=&quot;http://2.bp.blogspot.com/_DtQT1t1sVgk/TLYS7F4oyQI/AAAAAAAAAfs/fVvi3ZnR-qI/s320/part1_window.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Das ist zwar im Moment noch eher langweilig, aber wenn ich sehe wie wenig ich kodieren muss um dieses Ergebnis zu erreichen doch sehr beeindruckend.&lt;br /&gt;&lt;br /&gt;Ich bin gespannt wie es weitergeht und werde hier berichten.</content><link rel='replies' type='application/atom+xml' href='http://jmuelbert.blogspot.com/feeds/7509344533124902868/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://jmuelbert.blogspot.com/2010/10/programmieren-mit-qt.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/7509344533124902868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4333452232975601150/posts/default/7509344533124902868'/><link rel='alternate' type='text/html' href='http://jmuelbert.blogspot.com/2010/10/programmieren-mit-qt.html' title='Programmieren mit QT'/><author><name>Jürgen Mülbert</name><uri>https://plus.google.com/115915542128425739223</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MT36YwslPbw/AAAAAAAAAAI/AAAAAAAABn8/DTQo81htEe4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_DtQT1t1sVgk/TLYRMxyccxI/AAAAAAAAAfo/XZWL7a3gRFo/s72-c/part1_files.JPG" height="72" width="72"/><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1"/><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD"/></entry></feed>