Login


 
Newsletter
Werbung

Mo, 21. Januar 2002, 00:00

Qt-Programmierung Teil 1

Warum Qt und nicht KDE?

Ganz einfach: Portabilität

Primär arbeite ich unter Windows und mit KDE-Programmierung kommt man dort nicht weit. Deswegen habe ich in der Vergangenheit auch immer etwas neidvoll auf die Linux­User geschielt, weil Trolltech denen für GPL-Programme die Qt-Library frei zur Verfügung stellt, den Windows-Benutzern aber selbst für GPL-Programme eine mehrere tausend Mark teure Lizenz abverlangt.

Die Programmierung grafischer Oberflächen mit der Windows-API kommt einer Programmierung mit den X11-Librarys gleich (pain in the ass). Als Erleichterung bieten sich die Microsoft Foundation Classes an, aber selbst mit der MFC ist es noch immer nicht so einfach, eine grafische Oberfläche zu programmieren wie dies z.B. unter Linux mit der Qt möglich ist.

Seitdem Trolltech allerdings die Qt-Bibliothek auch unter Windows für nicht-kommerziellen Einsatz freigegeben hat, steht GPL-Programmen unter Windows eigentlich nur noch der Compiler im Weg. Die freie Qt-Bibliothek für Windows kann im Gegensatz zur kommerziellen Qt-Version nur mit dem Microsoft Visual C++ Compiler verwendet werden. Eine Qt-Version für den GCC oder den Borland BCC32 v5.5 ist bisher (noch) nicht verfügbar.

Voraussetzungen

Folgende Software wird benötigt:

GNU/Linux

  • gcc v2.95.x1
  • Qt v2.3.02
  • tmake v1.73

Microsoft Windows:

  • Microsoft Visual C++ v6.04 5
  • Qt v2.3.0 (non commercial edition)6 (tmake v1.7 ist hier schon enthalten)

Anmerkung: Mit Erscheinen von Qt Version 3 wird tmake durch qmake abgelöst. qmake ist vollständig kompatibel zu tmake, was die Aufrufsyntax und die Syntax der *.pro-Konfigurationsdateien betrifft.

Installation

GNU/Linux

Der GCC ist bei den meisten GNU/Linux-Distributionen bereits vorkompiliert enthalten, weswegen hier nicht weiter auf die Installation eingegangen wird.

Auch Qt ist bei den meisten GNU/Linux Distributionen bereits vorkompiliert enthalten, so dass auch hier keine Notwendigkeit besteht, dies selbst zu kompilieren. Wer die Qt Version 3 ausprobieren möchte, kann dies gerne tun. Eine ausführliche Installationsanleitung liegt dem Qt-Quelltext bei. Ein etwas versierter Linux Programmierer sollte mit der Installation keine Schwierigkeiten haben.

Solange Trolltech keine Qt Version 3 für Microsoft Windows zum Download anbietet, wird aus Rücksicht auf die Kompatibilität mit Microsoft Windows nur die Qt-Version 2.3.x verwendet und vorausgesetzt.

Die Installation von tmake beschränkt sich darauf, das Archiv zu entpacken (z.B. nach /opt/tmake) und ein paar Variablen zu belegen:

<font color="#008080">TMAKE_DIR</font>=/opt/tmake
<font color="#008080">TMAKEPATH</font>=<font color="#a020f0">${</font><font
color="#a020f0">TMAKE_DIR</font><font color="#a020f0">}</font>/lib/linux-g++
<font color="#008080">PATH</font>=<font color="#a020f0">$PATH</font>:<font
color="#a020f0">${</font><font color="#a020f0">TMAKE_DIR</font><font
color="#a020f0">}</font>/bin
<font color="#008080">QTDIR</font>=/usr/lib/qt2
<font color="#008080">KDEDIR</font>=/opt/kde2
<font color="#804040"><strong>export </strong></font><font
color="#008080">TMAKEPATH</font> <font color="#008080">PATH</font> <font
color="#008080">QTDIR</font> <font color="#008080">KDEDIR</font>
Konfiguration: /etc/profile.local (Auszug)

Microsoft Windows

Qt wird in das Verzeichnis C:\qt installiert. Die Frage, ob der Pfad entsprechend angepasst werden soll, damit die Tools in C:\qt\bin im Pfad liegen, ist zu bejahen.

Da bei Windows keine SymLinks möglich sind, muss nach der Qt-Installation noch händisch die Datei C:\qt\lib\qt-mt230nc.lib nach C:\qt\lib\qt.lib kopiert werden. Ansonsten schlagen später die Kompilierversuche fehl. Ob dies ein Bug in der nicht-kommerziellen Qt-Bibliothek für Windows ist oder ob bei mir nur ein Installationsproblem in Verbindung mit dem Microsoft Visual Studio aufgetreten ist, kann ich nicht sicher feststellen. Allerdings ließen sich ohne diese Änderungen keine Qt-Quelltexte kompilieren.

Nach der Installation der Qt wird Microsoft Visual C++ 6.0 (alternativ Microsoft Visual Studio v6.0) installiert. Bei Microsoft Visual Studio ist es ausreichend, wenn nur Visual C++ installiert wird. Die eigentliche Installation muss wohl nicht näher beschrieben werden. Die Frage ob die Umgebung angepasst werden soll, dass Compiler, Linker, ... im Pfad vorhanden sind, ist zu bejahen.

Nach einem (auch bei Windows 2000 notwendigen) Reboot werden noch ein paar Konfigurationsskripte gestartet. Danach ist die Installation des Visual Studio abgeschlossen.

Ein erstes Programm

kompletter Quellcode der Programmbeispiele

<font color="#804040"> 1</font> <font color="#a020f0">#include </font><font color="#ff00ff"><qapplication.h></font> <font color="#0000ff">// QApplication</font>
<font color="#804040"> 2</font> <font color="#a020f0">#include </font><font color="#ff00ff"><qmainwindow.h></font> <font color="#0000ff">// QMainWindow</font>
<font color="#804040"> 3</font>
<font color="#804040"> 4</font> <font color="#804040"><strong>using</strong></font> <font color="#2e8b57"><strong>namespace</strong></font> std;
<font color="#804040"> 5</font>
<font color="#804040"> 6</font> <font color="#2e8b57"><strong>int</strong></font> main(<font color="#2e8b57"><strong>int</strong></font> argc, <font color="#2e8b57"><strong>char</strong></font> **argv)
<font color="#804040"> 7</font> {
<font color="#804040"> 8</font> <font color="#0000ff">// Create a QApplication object (required)</font>
<font color="#804040"> 9</font> QApplication app(argc, argv);
<font color="#804040">10</font>
<font color="#804040">11</font> <font color="#0000ff">// Create a QMainWindow object</font>
<font color="#804040">12</font> QMainWindow *window = <font color="#804040"><strong>new</strong></font> QMainWindow();
<font color="#804040">13</font>
<font color="#804040">14</font> <font color="#0000ff">// Move and resize the QMainWindow object</font>
<font color="#804040">15</font> <font color="#0000ff">// left=200, top=200, width=400, height=300</font>
<font color="#804040">16</font> window->setGeometry(<font color="#ff00ff">200</font>, <font color="#ff00ff">200</font>, <font color="#ff00ff">400</font>, <font color="#ff00ff">300</font>);
<font color="#804040">17</font>
<font color="#804040">18</font> <font color="#0000ff">// Main window = QMainWindow object</font>
<font color="#804040">19</font> app.setMainWidget(window);
<font color="#804040">20</font>
<font color="#804040">21</font> <font color="#0000ff">// set Window Title</font>
<font color="#804040">22</font> window->setCaption(<font color="#ff00ff">&quot;My QMainWindow example&quot;</font>);
<font color="#804040">23</font>
<font color="#804040">24</font> <font color="#0000ff">// Show the window</font>
<font color="#804040">25</font> window->show();
<font color="#804040">26</font>
<font color="#804040">27</font> <font color="#0000ff">// Go to the main loop (required)</font>
<font color="#804040">28</font> <font color="#804040"><strong>return</strong></font> app.exec();
<font color="#804040">29</font> }
Listing 1: main.cpp

Ein bisschen Erklärung

<font color="#804040"> 1</font> <font color="#a020f0">#include </font><font color="#ff00ff"><qapplication.h></font> <font color="#0000ff">// QApplication</font>
<font color="#804040"> 2</font> <font color="#a020f0">#include </font><font color="#ff00ff"><qmainwindow.h></font> <font color="#0000ff">// QMainWindow</font>

Die ersten beiden Zeilen des Quellcodes inkludieren die benötigten Header-Dateien. In den meisten Fällen entsprechen die Namen der Header-Dateien den Klassen, die sie enthalten. Einzige Ausnahmen bilden einige wenige Header, die mehrere Klassendefinitionen enthalten. Als Beispiel sei hier auf den Header qlistview.h verwiesen, der neben der Definition der Klasse QListView auch noch die Definition der Klasse QListViewItem enthält.

Der Header qapplication.h enthält die Klasse QApplication und ist in jedem Qt-Programm notwendig.

<font color="#804040"> 8</font> <font color="#0000ff">// Create a QApplication object (required)</font>
<font color="#804040"> 9</font> QApplication app(argc, argv);

In jeder Qt-Applikation ist die Instanziierung eines QApplication-Objekts notwendig. Das QApplication-Objekt übernimmt das ganze Event-Handling. Bei KDE-Applikationen entspricht dies am ehesten dem Befehl KCmdLineArgs::init(argc, argv, &quot;Application-Title&quot;, aboutText, &quot;1.0&quot;);.

<font color="#804040">11</font> <font color="#0000ff">// Create a QMainWindow object</font>
<font color="#804040">12</font> QMainWindow *window = <font
color="#804040"><strong>new</strong></font> QMainWindow();

Diese Zeile erzeugt eine Instanz der Klasse QMainWindow. Dieses Widget wird das Hauptfenster der Applikation darstellen.

Kommentare (Insgesamt: 0 || Kommentieren )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung