Qt-Tutorial Teil 3: Ressourcen unter mehreren Betriebssystemen (Windows/Mac/Linux) laden
 | 
01.07.2010
 | 
11:49

Qt-Tutorial Teil 3: Ressourcen unter mehreren Betriebssystemen (Windows/Mac/Linux) laden

Nachdem im letzten Teil des Qt-Tutorials gezeigt wurde, wie man die Qt-eigenen Sprachdateien in verschiedenen Betriebssystemen richtig lädt, beschreibt der dritte Teil das korrekte Laden von allgemeinen Ressourcen.

Verzeichniswirren

Als Beispiel dient ein Verzeichnis, in dem HTML-Dateien liegen. Diese werden im Programm von der Online-Hilfe geladen und dargestellt. Ähnlich wie bei den Sprachdateien ist der genaue Pfad abhängig vom Betriebssystem:

  • Linux: Der Pfad wird durch eine qmake-Variable in der Projektdatei fix definiert. Im ersten Teil des Tutorials war dies die Zeile DEFINES += "HELPPATH=\\\"/usr/share/doc/myprog/help\\\".
  • Windows: In Windows liegt die Hilfe im Programmverzeichnis (z.B. C:\Programme\MeinProgramm\help\). Insofern ist das einfach. Während des Entwickelns wird jedoch ein Verzeichnis debug und Verzeichnis release erzeugt, so dass die Pfade hier nicht stimmen. Man soll jedoch auch unter diesen Umständen das Programm realitätsnah testen können.
  • Mac: Die Hilfe liegt im Resource Bundle im Verzeichnis Resources.

Um diesen Umständen Rechnung zu tragen, muss der Compiler je Betriebssystem angewiesen werden, verschiedene Pfade auszuwählen. Folgendes Listing zeigt eine typische Methode, die in ein Objekt integriert werden kann, um den richtigen Pfad zurückzugeben:

Quelltext:  Alles auswählen  |  Zeilennummerierung an/aus
  1. /*
  2.  * gibt ein korrektes Unterverzeichnis der Hilfe zurück
  3.  * subdir = Verzeichnis unterhalb des Hilfeverzeichnisses
  4. */
  5. QDir HelpBrowser::directoryOf(const QString &subdir)
  6. {
  7. #if defined(LINUX)
  8.     //fixer Pfad unter Linux (s. Projektdatei)
  9.     QDir dir(HELPPATH);
  10. #else
  11.     //ansonsten ist der Pfad der der Applikation
  12.     QDir dir(QApplication::applicationDirPath());
  13.  
  14. #if defined(Q_OS_WIN)
  15.     //Windows: Testen, ob man noch in der Entwicklungsumgebung ist
  16.     //falls ja: in übergeordnetes Verzeichnis wechseln
  17.     if (dir.dirName().toLower() == "debug"
  18.             || dir.dirName().toLower() == "release")
  19.         dir.cdUp();
  20. #elif defined(Q_OS_MAC)
  21.     //falls im Resource Bundle: Wechsel ins Verzeichnis Resources
  22.     if (dir.dirName() == "MacOS") {
  23.         dir.cdUp();
  24.         dir.cd("Resources");
  25.     }
  26. #endif
  27. #endif
  28.     //nun in das eigentliche Unterverzeichnis wechseln
  29.     dir.cd(subdir);
  30.  
  31.     //korrekten absoluten Pfad zurückgeben
  32.     return dir;
  33. }

Wie man hier sieht, kann man relativ leicht den Pfad festsetzen, wenn man mit den entsprechenden Präprozessor-Anweisungen arbeitet.

Falls man Daten übrigens ins Verzeichnis des Benutzer ablegen bzw. von dort laden will, kann man dies mit der statischen Methode QDir::homePath() bewerkstelligen.

  •  
  • 0 Kommentare
  •  
Mein Kommentar
Ich möchte über jeden weiteren Kommentar benachrichtigt werden.

Zurück