Jürgen Wolf Qt 4 GUI-Entwicklung mit C++ Das umfassende Handbuch
Auf einen Blick 1 Einstieg in Qt... 15 2 Signale und Slots... 27 3 Basisklassen und Bibliotheken von Qt... 55 4 Dialoge, Layout und Qt-Widgets... 67 5 Qt-Hauptfenster... 317 6 Ein-/Ausgabe von Daten... 411 7 Ereignisverarbeitung... 619 8 Drag & Drop und Zwischenablage... 639 9 Grafik und Drucken... 657 10 XML... 705 11 Internationale Anwendungen... 727 12 Weiteres zu Qt... 737
Inhalt Vorwort... 11 Warum Qt?... 11 Voraussetzungen für Qt... 12 Ziel und Zielgruppe des Buches... 12 Schnellübersicht zum Buch... 13 Danksagung... 13 1 Einstieg in Qt... 15 1.1 Was ist Qt?... 15 1.2 Lizenzierung... 16 1.3 Qt installieren... 17 1.3.1 Linux/Unix und Mac OS X... 18 1.3.2 MS-Windows (XP/Vista)... 19 1.4 Hallo Welt mit Qt... 20 1.4.1 Ein ausführbares Qt-Programm entwickeln... 22 1.4.2 Das Programm starten... 24 2 Signale und Slots... 27 2.1 Grundlagen... 28 2.1.1 Signale und Slots ermitteln... 30 2.1.2 Gegenseitiges Signal- und Slot-Konzept... 37 2.1.3 Argumentenlisten von Signal-Slot-Verbindungen... 39 2.1.4 Eigene Klasse mit Signalen und Slots definieren bzw. erweitern... 40 2.1.5 Widget mit eigenem Slot... 46 2.1.6 Widget mit eigenem Signal... 49 2.1.7 Zusammenfassung... 53 3 Basisklassen und Bibliotheken von Qt... 55 3.1 Basisklasse: QObject... 55 3.2 Qt-Klassenhierarchie... 55 3.3 Speicherverwaltung von Objekten... 58 3.4 Programm-Bibliotheken von Qt... 60 3.4.1 QtCore... 62 3.4.2 QtGui... 63 5
Inhalt 3.4.3 QtNetwork... 63 3.4.4 QtOpenGL... 63 3.4.5 QtSql... 63 3.4.6 QtSvg... 64 3.4.7 QtXml... 64 3.4.8 Qt3Support... 65 3.4.9 Der Rest... 65 3.5 Meta-Include-Headerdatei... 65 4 Dialoge, Layout und Qt-Widgets... 67 4.1 Eigene Widget-Klassen erstellen... 67 4.2 Widgets anordnen das Layout... 70 4.2.1 Grundlegende Layout-Widgets... 70 4.3 Erstellen von Dialogen (QDialog)... 96 4.3.1 Benutzerfreundlichkeit von Dialogen... 106 4.4 Vorgefertigte Dialoge... 109 4.4.1 QMessageBox Nachrichtendialoge... 110 4.4.2 QFileDialog Dialoge zur Dateiauswahl... 118 4.4.3 QInputDialog Eingabedialog... 123 4.4.4 QFontDialog Schriftauswahl... 127 4.4.5 QColorDialog Farbauswahl... 128 4.4.6 QPrintDialog Druckerdialog... 129 4.4.7 Dialoge Übersicht... 129 4.5 Qt-Widgets... 130 4.5.1 Buttons Basisklasse QAbstractButton... 130 4.5.2 Container-Widgets... 152 4.5.3 Widgets zur Zustandsanzeige... 179 4.5.4 Widgets für die Eingabe... 196 4.5.5 Item-View-Subklassen verwenden (Ansichts-Klassen)... 259 4.5.6 Exkurs: Model-View-Controller (MVC)... 297 4.5.7 Vordefinierte Modelle... 298 4.6 Online-Hilfen... 311 4.6.1 Statuszeilentipp... 311 4.6.2 Tooltips... 311 4.6.3 Direkthilfe... 312 4.6.4 Einfache Dokumentation mit QTextBrowser... 314 4.6.5 QAssistantClient Qt Assistant weiterverwenden... 316 6
Inhalt 5 Qt-Hauptfenster... 317 5.1 Aufbau eines Hauptfensters... 317 5.2 Die Klasse QMainWindow... 318 5.2.1 Flags für QMainWindow... 320 5.2.2 Eine Menüleiste mit der Klasse QMenu und QMenuBar... 321 5.2.3 Eine Statusleiste mit der Klasse QStatusBar... 339 5.2.4 Eine Werkzeugleiste mit der Klasse QToolBar... 346 5.2.5 Verschiebbare Widgets im Hauptfenster mit QDockWidget... 352 5.2.6 Einstellungen der Anwendung speichern mit QSettings... 357 5.2.7 Anwendungen mit MDI-Fenster erstellen (Klasse QWorkspace)... 377 5.2.8 Übersicht zu den Methoden der Klasse QMainWindow... 391 5.3 Fenster aufteilen QSplitter... 394 5.3.1 Splitter-Handle QSplitterHandle... 398 5.4 Scrolling Area QScrollArea... 403 6 Ein-/Ausgabe von Daten... 411 6.1 Schnittstelle für alle E/A-Geräte QIODevice... 411 6.2 Die Datei QFile... 415 6.2.1 Temporäre Datei QTemporaryFile... 423 6.3 Streams... 425 6.3.1 Binäre Daten QDataStream... 425 6.3.2 Text Daten QTextStream... 438 6.4 Der Puffer QBuffer... 455 6.5 Verzeichnisse QDir... 457 6.6 Datei-Informationen QFileInfo... 466 6.7 Interprozesskommunikation QProcess... 474 6.8 Netzwerkkommunikation (Sockets)... 489 6.8.1 QAbstractSocket... 490 6.8.2 Das HTTP-Protokoll QHttp... 521 6.8.3 Das FTP-Protokol QFtp... 537 6.8.4 Ein Proxy QNetworkProxy... 553 6.9 Multithreads QThread... 554 6.9.1 QMutex... 564 6.9.2 QMutexLocker... 566 7
Inhalt 6.9.3 QReadWriteLock... 567 6.9.4 QSemaphore... 569 6.9.5 QWaitCondition... 575 6.9.6 Datenstrukturen an den Thread binden QThreadStorage... 578 6.9.7 Ausblick... 582 6.10 Relationale Datenbanken QtSql... 583 6.10.1 Die Treiber für QtSql... 583 6.10.2 Ein Verbindung zur Datenbank herstellen QSqlDatabase... 585 6.10.3 SQL-Anweisungen ausführen QSqlQuery... 586 6.10.4 SQL-Anweisungen der höheren Ebene QSqlTableModel... 593 6.10.5 View-Klasse QTableView mit SQL verwenden... 598 6.11 Klassen und Typen zum Speichern von Daten... 601 6.11.1 Qt-eigene Typendefinitionen... 601 6.11.2 QString... 602 6.11.3 QChar... 604 6.11.4 QByteArray... 605 6.11.5 QVariant... 606 6.11.6 Container und Algorithmen... 606 6.12 Datum und Uhrzeit... 618 7 Ereignisverarbeitung... 619 7.1 Ereignisschleife (Event-Loop)... 619 7.2 Ereignishandler neu implementieren... 621 7.2.1 event() neu implementieren... 627 7.3 Ereignisfilter implementieren... 628 7.4 Eingreifen in die Ereignisverwaltung... 631 7.4.1 QApplication::notify()... 631 7.4.2 eventfilter() Ereignisfilter... 632 7.4.3 event()... 632 7.4.4 Ereignishandler... 632 7.4.5 Weitergabe von Ereignissen... 632 7.5 Ereignisverarbeitung für Threads... 633 7.6 Ereignisverarbeitung optimieren... 636 8
Inhalt 8 Drag & Drop und Zwischenablage... 639 8.1 Kodierung mit QMimeData... 640 8.1.1 Drop-Seite... 643 8.1.2 Drag-Seite... 648 8.1.3 Benutzerdefinierte MIME-Typen für das Drag & Drop... 651 8.2 Zwischenablage QClipboard... 653 9 Grafik und Drucken... 657 9.1 Zeichnen mit Qt QPainter... 657 9.1.1 QPaintEvent... 658 9.1.2 Einstellungen... 662 9.1.3 Transformation des Koordinatensystems... 665 9.2 Bildbearbeitung QImage... 674 9.2.1 Speicher- und Bildformate... 675 9.2.2 Bild laden und speichern... 675 9.2.3 Bildinformationen und Bild-Transformation... 676 9.2.4 Pixel auslesen... 677 9.3 Drucken mit Qt QPrinter... 683 9.4 OpenGL mit Qt... 693 9.4.1 Spezifikation... 694 9.4.2 Anwendungsbeispiele in der Praxis von OpenGL... 694 9.4.3 Portabilität... 695 9.4.4 OpenGL mit Qt anwenden... 695 9.5 Vektorgrafik QSvgWidget... 702 10 XML... 705 10.1 SAX-API von Qt verwenden... 706 10.1.1 Default-Handler implementieren... 708 10.2 DOM-API von Qt verwenden... 713 10.2.1 Elemente suchen... 724 10.2.2 Weiteres... 725 11 Internationale Anwendungen... 727 11.1 Voraussetzung für eine Übersetzung... 727 11.1.1 Fehlervermeidung und Kommentare... 728 11.2 Übersetzen mit Linguist... 729 9
Inhalt 11.3 Übersetzung verwenden... 732 11.4 char-arrays internationalisieren... 734 12 Weiteres zu Qt... 737 12.1 Dynamische Bibliotheken erstellen... 737 12.1.1 Dynamische Bibliothek dynamisch nachladen... 739 12.1.2 Plugins erstellen... 742 12.2 Embedded Progamming mit Qtopia... 743 12.3 Debugging-Ausgabe... 743 12.3.1 Fehlerbehebung... 748 12.4 Qt Styles... 748 12.5 QApplication, QCoreApplication und die Kommandozeile... 750 12.6 Anwendungen mit dem Qt Designer erstellen... 752 12.6.1 Ein Dialog-Fenster erstellen... 753 12.6.2 Ein Hauptfenster mit dem Designer entwerfen... 775 12.7 Das Qt-Ressourcen-System... 785 Index... 787 10
Anfang = der wichtigste Teil der Arbeit. (Wir könnten auch sagen: der Entschluss. Was Platon damit nicht sagen wollte, war: Der Anfang ist schon die halbe Miete. Das glaube ich keineswegs. Es gibt viele Leute, die packen vieles an und bringen nichts zu Ende. Mein Credo ist: Eins nach dem anderen. Zügig, entschlossen, zielorientiert. Es gibt viel zu tun packen wir es an!) 1 Einstieg in Qt Ich denke, wer dieses Buch erworben hat, wird wissen, worauf er sich einlässt. Allerdings gibt es ja noch den Leser, der sich solche Kulturgüter in einem stationären Sortimentsbuchhandel erwirbt und sich zuvor die ersten Seiten durchliest. Ok, genug mit dem Althochdeutsch. 1.1 Was ist Qt? Qt ist eine Klassenbibliothek die zur plattformunabhängigen Programmierung grafischer Benutzeroberflächen (kurz und engl. auch GUI = Graphical User Interface) unter C++ verwendet wird und sich zunehmender Beliebtheit erfreut. Verantwortlich für Qt ist die norwegische Firma Trolltech (ehemals Quasar Technologies). Diese Bibliothek ist mittlerweile für die verschiedensten Betriebssysteme bzw. Grafikplattformen wie X11 (Linux-/Unix-Derivate), Mac OS X, Windows oder auch als PDA-Version erhältlich. Allerdings umfasst Qt nicht nur eine Bibliothek, die man ausschließlich zur Entwicklung grafischer Benutzeroberflächen verwendet bei dieser»bibliothek«handelt es sich eher um ein mächtiges Framework, das XML, Datenbanken, Internationalisierung, Netzwerke, Datei-Ein-Ausgabe, Interprozesskommunikation, Multithreading und einiges mehr anbietet. Somit kann man sagen, dass sich mit Qt eigentlich alles machen lässt und man keine weiteren Bibliotheken mehr benötigt. Ein rundes Sorglospaket eben. Zwar verwendet Qt eine Erweiterung der Programmiersprache C++, doch gibt es auch Implementierungen für C, C#, Java, Perl, Python und Ruby. Allerdings werden diese Erweiterungen nicht von Trolltech gepflegt. 15
1 Einstieg in Qt Hinweis Qt (ursprünglich Quasar toolkit) wird stets mit einem kleinen t geschrieben und nicht als QT, welches für Apples Multimediasoftware QuickTime steht. Allerdings steht Qt unterdessen nicht mehr für Quasar toolkit, sondern will offiziell wie das englische Wort cute gesprochen werden. 1.2 Lizenzierung Wer sich professionell mit der Software-Entwicklung auseinandersetzt, wovon ich hier auch ausgehe, muss sich Gedanken um die Lizenzierung von Qt machen. Meist fallen hierbei immer horrende Kosten an. Bei Qt kann ich Sie zunächst beruhigen. Seit Februar 2005 (ab Qt 4.0) hat sich Trolltech für die duale Lizenzierung entschieden. Ein weiteres erfolgreiches und prominentes Beispiel für diese Lizenzierung ist etwa die schwedische Firma MySQL AB mit dem gleichnamigen Datenbankverwaltungssystem. Durch das duale Lizenzsystem haben Sie mehrere Möglichkeiten, Ihre Software zu vertreiben. Dabei können Sie Ihre Software unter einer Open-Source-Lizenz wie der GPL (General Public License) oder unter einer proprietären, kommerziellen Lizenz verwenden. Dies bedeutet: Sollten Sie mit Qt eine proprietäre Software entwickeln, fällt eine Lizenzgebühr für Qt ab. Somit können Sie eigene Anwendungen entwickeln, ohne diese selbst wieder der Open-Source-Lizenz unterwerfen zu müssen. Mit diesem dualen Lizenzmodell ist es einerseits möglich, das Open-Source-Modell zur Entwicklung und Distribution von Software zu fördern, und andererseits ein professionelles Geschäftsmodell zu etablieren. Proprietär ist ein Zustand, bei dem Sie die exklusiven Rechte an einer Software besitzen und jedermann verbieten, die Software zu kopieren, verändern, weiterzugeben oder den Quelltext zu studieren. Open-Source bedeutet, dass es jedem Anwender möglich ist, den Quelltext des Programms einzusehen und beliebig zu verändern oder weiterzugeben. Man sollte nicht den Fehler begehen und den Begriff»Freie Software«mit Open-Source gleichstellen. Kosten: Für den Fall, dass Sie tatsächlich vorhaben, kommerzielle Software zu entwickeln, hängen die Kosten, die Sie für eine Lizenz bezahlen müssen, von mehreren Faktoren ab. Zunächst kommt es darauf an, für wie viele Plattformen Sie eine Lizenz benötigen. Dann besteht noch für einige Gruppen die Möglichkeit, einen beachtlichen Rabatt zu erhalten. Hierzu bietet Trolltech ein»small business program«an. Mehr Informationen erhalten Sie per E-Mail unter der Kontaktadresse sales@trolltech.com. 16
Qt installieren 1.3 Das duale Lizenzmodell birgt somit einige Vor-, aber auch Nachteile. Der Programmierer kann etwa ohne Einschränkungen Softwarelizenzen verkaufen, die Software mit proprietären Erweiterungen versehen und ist nicht an nur eine Lizenz gebunden. Außerdem wird dadurch die Entwicklung von Qt gefördert. Natürlich sollte man niemals zu schwarz sehen. Rein theoretisch sind mit diesem Lizenzmodell aber auch Nachteile verbunden. So könnte sich Trolltech bspw. entschließen, die Entwicklung von offenen Versionen zu stoppen. Ebenso kann Trolltech die Arbeit der Open-Source-Entwickler ausnutzen. Nach dem Motto: Die Open-Source-Entwickler bringen Erweiterungen ein, und Trolltech hält die Hand auf. Allerdings war dies bisher bei Qt nie der Fall und immer ein fairer Austausch. Hinweis Ein bekanntes (Negativ-)Beispiel, wo Open-Source-Entwickler fleißig an einer Software mitentwickelt haben und dann vor verschlossenen Türen standen, ist Nessus, ein bekannter Netzwerk- oder Vulnerability-Scanner für Linux- und Unixsysteme. Nessus stand vorher unter der GPL und wird ab der nächsten Version unter einer proprietären Lizenz weiterentwickelt. Hiermit will ich das Thema der Lizenzierung beenden. Allerdings sei noch angemerkt, dass Sie sich mit dieser Möglichkeit vertraut machen sollten, um nicht eventuell einmal eine böse Überraschung im Briefkasten vorzufinden. Wir leben in einer schnellen Zeit, und was hier geschrieben steht, muss in einem der nächsten Versionen von Qt nicht mehr gelten. 1.3 Qt installieren Um die Beispiele im Buch tatsächlich verwenden zu können, müssen Sie Qt auf Ihrem Rechner installieren. Zunächst sollten Sie sich entscheiden, ob Sie die kommerzielle Version oder die Open-Source-Version von Qt installieren wollen. Für die Beispiele im Buch spielt dies keine Rolle. In unserem Buch gehen wir davon aus, dass Sie sich mit der Programmierung von Qt vertraut machen wollen. Hierbei wird wohl kaum einer die Katze im Sack kaufen. Also gehen wir zunächst von der Open-Source-Version aus. Zum Zeitpunkt der Drucklegung unseres Buches war die Version 4.3 aktuell. Wer die Entwicklung von Qt beobachtet, wird feststellen, dass recht viel»in Bewegung«ist. Gegen Ende des ersten Quartals 2008 ist eine Version 4.4 geplant. Eine Version 5.x ist noch nirgendwo angedacht. Alle Versionen sollen allerdings 17
1 Einstieg in Qt abwärtskompatibel sein, so dass es immer möglich sein soll, den heutigen Code bei neueren Versionen zu verwenden. Wer den Schritt von 3.x auf 4.x mitbekommen hat, wird festgestellt haben, dass hier die Kompatibilität gebrochen wurde, weil sich dies aus architektonischen Gründen nicht mehr vermeiden ließ. Allerdings wird ein solcher Bruch der Kompatibilität nur vollzogen, wenn es sich nicht mehr vermeiden lässt. Die aktuellste Version von Qt beziehen Sie am besten von der Webseite selbst (http://www.trolltech.com). Hier finden Sie gleich weitere Produkte von Trolltech wie bspw. Qtopia, womit Sie Anwendungen für Embedded Systems (PDAs, Mobiltelefone, etc.) erstellen können. Die Webseite beinhaltet auch die Beschreibung zur Lizenzierung Hinweis Die Bequemen unter den Lesern finden auf der Buch-CD die zum Drucklegungszeitpunkt aktuellste Open-Source-Version von Qt zur Installation. Hinweis Neben der Bibliothek finden Sie beim Open-Source-Paket eine Menge Demos (Qt- Demos), den Qt Assistant, der als Referenz und Dokumentation unverzichtbar ist, wenn Sie sich mit Qt befassen, einen Designer (RAD-Tool) und den Linguist (für die Lokalisierung). 1.3.1 Linux/Unix und Mac OS X In der Praxis empfiehlt es sich, bei Linux immer die vorkompilierten Pakete der jeweiligen Distributionen zu verwenden, die häufig mitgeliefert und nachträglich über den entsprechenden Paketmanager nachinstalliert werden können. Hierbei sei auch empfohlen, die neuesten Pakete der entsprechenden Distribution Online zu beziehen. Natürlich können Sie sich auch Ihr eigenes Paket bauen. Hierzu benötigen Sie die heruntergeladene (auch auf der Buch-CD vorhandene) TAR-Datei. Im Beispiel sei dies die Datei qt-x11-opensource-src-4.3.0.tar.gz. Im Verzeichnis der Datei müssen Sie diese zunächst entpacken und dann in das entsprechende Verzeichnis wechseln. Bspw.: user > gunzip qt-x11-opensource-src-4.3.0.tar.gz user > tar xvf qt-x11-opensource-src-4.3.0.tar user > cd qt-x11-opensource-src-4.3.0 Jetzt können Sie configure mit den von Ihnen gewünschten Optionen ausführen. Die Optionsauswahl können Sie mit./configure -help abfragen. Bspw. 18
Qt installieren 1.3 legen Sie mit der Option -debug neben der normalen Bibliothek eine Version mit Debug-Symbolen an. Auch bestimmte Datenbank-Treiber bzw. -Plugins müssen Sie hierbei hinzufügen, falls Sie diese verwenden wollen. Wollen Sie bspw. den SQLite-Treiber verwenden, wird die Option -qt-sql-sqlite angegeben. Natürlich lassen sich so auch Third-Party-Bibliotheken hinzufügen. Da aus lizenztechnischen Gründen bspw. kein GIF-Grafikformat unterstützt wird, kann man dieses Format mit -qt-gif verwenden. Wie auch immer natürlich können Sie ebenso gut ein einfaches configure verwenden: host >./configure Um nun daraus die Bibliothek, die Beispiele (Demos) und weitere Werkzeuge zu erstellen, reicht ein einfaches make aus: host > make Jetzt können Sie das Ganze als root mittels»make install«installieren (gewöhnlich ins Verzeichnis /usr/local/trolltech/qt-4.x.x): host > make install Danach müssen Sie nur noch die Umgebungsvariablen für Qt setzen. Bspw. die.profile-datei um folgenden Eintrag erweitern: PATH=/usr/local/Trolltech/Qt-4.x.x/bin:$PATH export PATH Hinweis Für Mac OS X gilt derselbe Weg wie eben beschrieben. Zusätzlich müssen unter Mac OS X noch die Xcode-Tools von Apple installiert sein. Diese liegen gewöhnlich Ihrer Apple-DVD bei oder können bei Apple heruntergeladen werden. 1.3.2 MS-Windows (XP/Vista) Für Windows finden Sie gewöhnlich einen kompletten Installer, der Ihnen alles automatisch installiert. Dabei gibt es für Windows zwei Open-Source-Versionen. Eine mit dem MinGW-Compiler und eine ohne. Sollten Sie bspw. den Microsoft VC++-Compiler verwenden wollen, brauchen Sie den MinGW-Compiler nicht. Ich empfehle Ihnen, zunächst den MinGW-Compiler zu verwenden. Ist der MinGW-Compiler bereits installiert, müssen Sie bei der Installation den Pfad hierzu angeben. Am Ende der Installation sollten Sie im Start-Menü einen neuen Ordner namens»qt by Trolltech v4.3.0 (Open Source)«finden, wo Sie die Kommandozeile zum Übersetzen der Anwendungen, die Demos (Beispiele), den 19
Index A Aktionen QAction 329 QActionGroup 337 Algorithmen 606, 613 kopieren 616 sortieren 613 suchen 614 assert Q_ASSERT() 748 Ausgabe Debugging 743 B Baummodell 284 Behälter-Widget 152 Bibliotheken erstellen 737 linken 61 Bildbearbeitung 674 Binäre Daten 425 Button 130 QButtonGroup 152 QCheckBox 142 QPushButton 137 QRadioButton 148 QToolButton 151 C Check-Boxen 142 Condition-Variable 575.config-Eintrag 357 Container 606 QHash 612 QLinkList 608 QList 607 QMap 611 QMultiHash 612 QMultiMap 611 QQueue 610 QSet 612 QStack 609 Container (Forts.) QVector 608 Container-Widget 152 QFrame 167 QGroupBox 152 QTabWidget 156 QToolBox 173 Container-Widget Behälter-Widget D Datei Ein- und Ausgabe 415 Informationen 466 QFile 415 QTemporaryFile 423 Temporäre Dateien 423 Datenbanken 583 Daten abfragen 589, 595 Daten ändern 588, 594 Daten hinzufügen 587, 594 Daten löschen 595 Item-View 598 QSqlDatabase 585 QSqlQuery 586 QSqlTableModel 593, 598 QtSql 583 SQL-Anweisungen ausführen 586 Transaktionen 590 Treiber 583 Verbindung herstellen 585 Datentypen Qt 601 Datum 231, 253, 618 D-BUS 61 Debugging Ausgabe 743 Designer 752 Dialog erstellen 753 Hauptfenster erstellen 775 Dialoge Benutzerfreundlichkeit 106 Dateiauswahl 118 Druckerdialog 129 Eingabe 123 787
Index Dialoge (Forts.) Erstellen 96 Farbauswahl 128 Layout 70 QColorDialog 128 QFileDialog 118 QFontDialog 127 QMessageBox 110 QPrintDialog 129 Schriftauswahl 127 vorgefertigte 109 Direkthilfe 312 DLL erstellen 737 Dock-Widget 352 DOM 705 API- 713 Drag & Drop 639 benutzerdefinierte MIME-Typen 651 Drag-Seite 648 Drop-Seite 643 Kodierung 640 QMimeData 640 Drag & Drop Ziehen und Fallenlassen Drucken 683 Grafik 683 HTML 688 PDF 683 PDF erstellen 687 Druckerdialog 129 Dynamische Bibliotheken 737 Laden 739 QLibrary 739 E Ein- und Ausgabe 411 Binäre Daten 425 Datei 415 Dateiinformationen 466 Puffer 455 QBuffer 455 QDataStream 425 QDir 457 QFile 415 QFileInfo 466 QIODevice 411 QTemporaryFile 423 QTextStream 438 Ein- und Ausgabe (Forts.) Streams 425 Temporäre Datei 423 Textdaten 438 Verzeichnisse 457 Zwischenspeicher 455 Eingabedialog 123 Eingabe-Widget 196 QAbstractSlider 196 QAbstractSpinBox 225 QCalendarWidget 253 QComboBox 215 QDateTimeEdit 231 QDial 201 QDoubleSpinBox 230 QFontComboBox 225 QLineEdit 205 QScrollBar 204 QSlider 199 QSpinBox 229 QTextEdit 239 Einstellungen speichern 357 Embeeded Progamming Qtopia 743 Ereignis-Handler 621 Ereignisschleife 619 Ereignisverarbeitung 619 Drag & Drop 639 Drag-Seite 648 Drop-Seite 643 Filter implementieren 628 Handler 621 Maus 639 Multithreads 633 neu implementieren 627 optimieren 636 QEvent 619 QPaintEvent 658 Tastatur 621 Übersicht 631 Verwaltung 631 F Farbauswahl 128 Fenster aufteilen QSplitter 394 QSplitterHandle 398 788
Index forever 582 FTP-Protokoll 537 G Grafik Bild laden 675 Bild speichern 675 Bildbearbeitung 674 Bildformate 675 Bildinformationen 676 Bild-Transformationen 676 draw...() 658 Drucken 683 Matrix 673 OpenGL 693 Pinsel 662 Pixel manipulieren 677 QPainter 657 QPaintEvent 658 Scherung 665 Schrift 662 Skalieren 665 Stift 663 SVG 702 Transformationen 665 Vektorgrafik 702 Versetzen 667 Grafik Zeichnen H Hauptfenster 317 Aktionen 329 Aktionsgruppe 337 aufteilen 394 Dock-Widget 352 MDI (Multi Document Interface) 377 Menü-Elemente 321 Menüleiste 321 QAction 329 QActionGroup 337 QDockWidget 352 QMainWindow 317 QMenu 321 QMenuBar 321 QScrollArea 403 QSettingsBar 357 QStatusBar 339 Hauptfenster (Forts.) QSToolBar 346 QWorkspace 377 Scrollbereich 403 Statusleiste 339 Verschiebbares Fenster 352 Werkzeugleiste 346 Zustand sichern 357 HTTP-Protokoll QHttp 521 QHttpHeader 527 I Interantionale Anwendungen 727 Internationale Anwendungen Linguist 729 Interprozesskommunikation QProcess 474 Item-View 259 Baummodell 284 Listenmodell 274 Model-View 297 QListWidget 274 QListWidgetItem 274 QTableWidget 260 QTableWidgetItem 260 QTreeWidget 284 QTreeWidgetItem 284 Tabellenmodell 260 K Klassenhierarchie Qt 55 Kodierung QMimeData 640 Kommandozeile auswerten 751 Konsolenprogramm erstellen 752 L Layout 70 eigenen Manager erstellen 94 Programmbeispiel 72 QBoxLayout 80 QGridLayout 71, 84 789
Index Layout (Forts.) QHBoxLayout 71 QLayout 76 QSpacerItem 92 QStackedLayout 88 QStackedWidget 89 Qt 93 QVBoxLayout 71 QWidgetItem 92 Widget 70 Linguist Übersetzen mit- 729 Listenmodell 274 Lizenzierung 16 lupdate 728 M make 24 MDI-Anwendungen 377 Menüleiste 321 Meta Object Compiler 45 Meta-Include-Datei 65 MOC 45 Modell-Präsentation 297 QDirModel 299 QSortFilterProxyModel 307 QStringListModel 305 Stringliste 305 Verzeichnishierarchien 299 vordefinierte 298 Model-View 297 Multi Document Interface 377 Multithreads 554 Condition 575 Daten an Thread binden 578 Ereignisverarbeitung 633 Mutex 564, 566 QMutex 564 QMutexLocker 566 QReadWriteLock 567 QSemaphore 569 QWaitCondition 575 Semaphore 569 Mutex 564, 566 N Netzwerkkommunikation 489 QAbstractSocket 490 QFtp 537 QHostAdress 515 QHostInfo 515 QHttp 521 QHttpHeader 527 QHttpRequestHeader 527 QHttpResponseHeader 527 QNetworkProxy 553 QTcpServer 497 QTcpSocket 496 QUdpSocket 507 QUrl 528 TCP 496, 497 UDP 507 O Online-Hilfen 311 Direkthilfe 312 Qt Assistant 316 QTextBrowser 314 Statuszeile 311 Tooltipps 311 OpenGL 693 MesaGL 694 QGLWidget 695 Spezifikation 694 Open-Source 16 P PDF aus HTML erstellen 689 drucken 687 erstellen 687 Plugins 742.pro 23 Programm starten 24 Projektdatei 23, 61 Prozess QProcess 474 starten 474 790
Index Q Q_ASSERT() 748 Q_CHECK_PTR() 748 QAbstractButton 130 QAbstractSlider 196 QAbstractSocket 490 QAbstractSpinBox 225 QAction 329 QActionGroup 337 qapp 69 QApplication 750 QAssistantClient 316 QBoxLayout 80 QBrush 662 QButtonGroup 152 QByteArray 605 QCalendarWidget 253 QChar 604 QCheckBox 142 QClipboard 653 QColorDialog 128 QComboBox 215 QCoreApplication 750 QDataStream 425 QDate 618 QDateTime 618 QDateTimeEdit 231 QDial 201 QDialog 96 QDir 457 QDirModel 299 QDockWidget 352 QDoubleSpinBox 230 QEvent 619 QFile 415 QFileDialog 118 QFileInfo 466 QFont 662 QFontComboBox 225 QFontDialog 127 QFrame 167 QFtp 537 QGLWidget 695 QGridLayout 71, 84 QGroupBox 152 QHash 612 QHBoxLayout 71 QHostAdress 515 QHostInfo 515 QHttp 521 QHttpHeader 527 QHttpRequestHeader 527 QHttpResponseHeader 527 QImage 674 Bild laden 675 Bild speichern 675 Bildformate 675 Bildinformationen 676 Bild-Transformationen 676 Pixel manipulieren 677 QInputDialog 123 QInputEvent 621 QIODevice 411 QKeyEvent 621 QLabel 189 QLayout 76 QLCDNumber 184 QLibrary 740 QLineEdit 205 QLinkList 608 QList 607 QListWidget 274 QListWidgetItem 274 QMainWindow 317, 318 qmake 22, 61, 738 make 24 Projektdatei 23 QMap 611 QMatrix 673 QMenu 321, 325 QMenuBar 321, 323 QMessageBox 110 QMimeData 640 benutzerdefinierte MIME-Typen 651 QMultiHash 612 QMultiMap 611 QMutex 564 QMutexLocker 566 QNetworkProxy 553 QObject 55, 727 QPainter 657 draw...() 658 Matrix 673 Pinsel 662 Scherung 665 Schrift 662 skalieren 665 791
Index QPainter (Forts.) Stift 663 Transformationen 665 versetzen 667 QPaintEvent 658 QPen 663 QPrintDialog 129 QPrinter 683 QProcess 474 QProgressBar 179 QProgressDialog 183 QPuffer 455 QPushButton 137 QQeue 610 QRadioButton 148 QReadWriteLock 567 QScrollArea 403 QScrollBar 204 QSemaphore 569 QSet 612 QSettings 357 QSlider 199 QSortFilterProxyModel 307 QSpacerItem 92 QSpinBox 229 QSplitter 394 QSplitterHandle 398 QSqlDatabase 585 QSqlQuery 586 QSqlTableModel 593, 598 QStack 609 QStackedLayout 88 QStackedWidget 89 QStatusBar 339 QString 602 QStringList 603 QStringListModel 305 QStyle 748 QSvgWidget 702 Qt 93 Bibliotheken 60 Datentypen 601 Designer 752 Hallo Welt 20 installieren 17 Klassenhierarchie 55 Lizenzierung 16 Meta Object Compiler 45 Programm starten 24 Qt (Forts.) qmake 22 Quellcode übersetzen 22 Ressourcen-System 785 Speicherverwaltung 58 Styles 748 Typendefinitionen 601 QT_TR_NOOP() 734 Qt3Support 60, 65 QTableWidget 260 QTableWidgetItem 260, 266 QTableWidgetSelectionRange 273 QTabWidget 156 QtAssistant 60 QtCore 60, 62 QTcpServer 497 QTcpSocket 496 QtDBus 60 QtDesigner 60 QTemporaryFile 423 QTextBrowser 253, 314 QTextEdit 239 QTextStream 438 <QtGui> 65 QtGui 60, 63 QThread 554 QThreadStorage 578 QTime 618 QTimer 187, 633 QtNetwork 60, 63 QToolBar 346 QToolBox 173 QToolButton 151 QtOpenGL 60, 63 Qtopia 743 QTreeWidget 284 QTreeWidgetItem 284 QtSql 60, 63, 583 Treiber 583 QtSvg 60, 64 QtTest 60 QtUiTools 60 QtXml 60, 64, 705 QUdpSocket 507 Quellcode übersetzen 22 QUrl 528 QVariant 606 QVBoxLayout 71 QVector 608 792
Index QWaitCondition 575 QWidgetItem 92 QWorkspace 377 R Radio-Button 148 RAD-Tool Qt Designer 752 Registry-Eintrag 357 Ressourcen-System 785 S SAX 705 API- 706 Schriftauswahl 127 Scrollbereich 403 Semaphore 569 Signale Argumentenliste 39 Grundlagen 28 Slots Argumentenliste 39 Grundlagen 28 Sockets 489 QAbstractSocket 490 QTcpServer 497 QTcpSocket 496 QUdpSocket 507 Speicherverwaltung 58 SQL 583 Statusleiste 339 normale Meldungen 340 permanente Meldungen 342 temporäre Meldungen 339 Statuszeilentipp 311 Strings 602 Styles Qt- 748 SVG 702 T Tabellenmodell 260, 598 mit SQL 598 TCP-Sockets 496 Threads 554 Toolbar 346 Tooltipps 311 tr() 727 U UDP-Sockets 507 Uhrzeit 231, 618 Union QVariant 606 V Verzeichnishierarchien anzeigen 299 Verzeichnisse QDir 457 W Werkzeugleiste 346 Widget Button 130 Container 152 Datum 231, 253 Eingabe-Widget 196 Layout 70 mit eigenem Signal 49 mit eigenem Slot 46 QAbstractButton 130 QAbstractSlider 196 QAbstractSpinBox 225 QButtonGroup 152 QCalendarWidget 253 QCheckBox 142 QComboBox 215 QDateTimeEdit 231 QDial 201 QDoubleSpinBox 230 QFontComboBox 225 QFrame 167 QGroupBox 152 QLabel 189 QLCDNumber 184 QLineEdit 205 QProgressBar 179 QProgressDialog 183 QPushButton 137 QRadioButton 148 QScrollBar 204 QSlider 199 793
Index Widget (Forts.) QSpinBox 229 QTabWidget 156 QTextBrowser 253 QTextEdit 239 QToolBox 173 QToolButton 151 Uhrzeit 231 Zustandsanzeige 179 X XML DOM-API 713 DOM-Baum durchsuchen 724 Einführung 705 SAX-API 706 SAX-Handler 708 Z Zeichen QChar 604 Zeichenketten QByteArray 605 QString 602 QStringList 603 Zeichnen 657 Ziehen und Fallenlassen 639 Zustandsanzeige 179 QLabel 189 QLCDNumber 184 QProgressBar 179 QProgressDialog 183 Zwischenablage QClipboard 653 794