\chapter{Eingesetzte GUI-Bibliothek}
\index{QT} \index{GUI}
Die komplette Benutzerschnittstelle des Clients wurde mit Hilfe des von Nokia (früher Trolltech) entwickelten Frameworks Qt in der Version 4 implementiert. Der Grund hierfür sind folgende Vorteile:
\begin{itemize}
 \item Qt wird bereits in einer Vielzahl von großen Projekten eingesetzt (KDE, Opera, Skype, Google Earth,...) und ist somit solide und erprobt. 
 \item Das komplette Framework besteht nicht nur aus einer GUI-Bibliothek sondern beinhaltet noch viele weitere nützliche Module, die bei der Entwicklung ebenfalls zum Einsatz kamen (QtNetwork, QtDBus, Internationalisierung). 
 \item Qt ist plattformunabhängig: Projekte können für Linux, OSX und Windows erstellt werden 
 \item Moderne Konzepte und Werkzeuge werden bereitgestellt. So wird das Signal-Slot-Konzept durchgängig eingehalten und mit dem GUI-Builder (\textbf{designer}) können einfach und professionell grafische Interfaces erstellt werden. 
 \item Duales Lizenzmodell: Qt gibt es sowohl unter einer proprietären Lizenz als auch unter der (L)GPL. 
\end{itemize}
Leider unterstützte das bisher eingesetzte Build System (Autotools) Qt nicht vollständig. Dies liegt daran dass Qt zum Erzeugen von Makefiles ein eigenes Werkzeug mitbringt (QMake). Aus diesem Grund wurde eine Umstellung auf das neue CMake durchgeführt. Dies ist nicht nur flexibler als Autotools (plattformunabhängig) sondern auch einfacher in der Einrichtung und Wartung (und wird übrigens vom KDE-Projekt seit der Version 4 eingesetzt). Des Weiteren ist es mit CMake nicht nur möglich Qt-Anwendungen zu erstellen sondern auch die komplette Qt-Toolchain (\textbf{moc}, \textbf{uic}, \textbf{rcc}, \textbf{qdbuscpp2xml}, \textbf{qdbusxml2cpp}, \textbf{lupdate}, \mbox{\textbf{lrelease}},...) komfortabel zu nutzen. So kann z.B. die Interface Erstellung für D-Bus oder das Internationalisieren der Software automatisiert werden.

\section{Internationalisierung}
\index{Internationalisierung}
Wie oben bereits erwähnt wurde zur Internationalisierung das von Qt4 bereitgestellte System benutzt und mit CMake automatisiert. Der interne Ablauf sieht folgendermaßen aus (\textit{CMakeLists.txt}):
\begin{enumerate}
 \item Mit \texttt{SET} werden Variablen mit Quelldateien definiert, die die zu übersetzenden Zeichenketten beinhalten. Diese dienen gleichzeitig zum Kompilieren.
 \item Danach werden ebenfalls mit \texttt{SET} Variablen definiert, die später die vom Benutzer zu übersetzenden .ts Dateien enthalten (z.B. \textit{i18n/pvsgui\_de\_DE.ts}).
 \item \texttt{QT4\_CREATE\_TRANSLATION} erzeugt im Build-Verzeichnis binäre Internationalisierungs Dateien, die beim Kompilieren eingebunden werden müssen.
\end{enumerate}

\textbf{Beispiel:}
\begin{verbatim}
SET( PVSGUI_SRCS src/pvsgui.cpp src/gui/clientConfigDialog.cpp )
SET( PVSGUI_TSS i18n/pvsgui_de_DE.ts i18n/pvsgui_fr_FR.ts )
QT4_CREATE_TRANSLATION( PVSGUI_QMS ${PVSGUI_SRCS} ${PVSGUI_TSS} )
ADD_EXECUTABLE( pvsgui ${PVSGUI_SRCS} ${PVSGUI_QMS} )
\end{verbatim}

Jede so erzeugte .ts Datei kann nun mit dem Programm \textbf{linguist} von einem Übersetzer bearbeitet werden. Damit die Zeichenketten später während der Ausführung übersetzt werden, müssen diese allerdings mit der Funktion \texttt{QObject::tr()} im Quellcode erzeugt worden sein.

