Table of Contents
Series Editor's Note xi
Foreword xiii
Preface xv
Acknowledgments xvii
A Brief History of Qt xix
Basic Qt
Getting Started 3
Hello Qt 3
Making Connections 5
Laying Out Widgets 6
Using the Reference Documentation 10
Creating Dialogs 13
Subclassing QDialog 13
Signals and Slots in Depth 20
Rapid Dialog Design 23
Shape-Changing Dialogs 31
Dynamic Dialogs 38
Built-in Widget and Dialog Classes 39
Creating Main Windows 45
Subclassing QMainWindow 46
Creating Menus and Toolbars 50
Setting Up the Status Bar 55
Implementing the File Menu 57
Using Dialogs 63
Storing Settings 69
Multiple Documents 71
Splash Screens 74
Implementing Application Functionality 77
The Central Widget 77
Subclassing QTableWidget 78
Loading and Saving 84
Implementing the Edit Menu 87
Implementing the Other Menus 91
Subclassing QTableWidgetItem 95
Creating Custom Widgets 105
Customizing Qt Widgets 105
Subclassing QWidget 107
Integrating Custom Widgets with Qt Designer 117
Double Buffering 121
Intermediate Qt
Layout Management 141
Laying Out Widgets on a Form 141
Stacked Layouts 147
Splitters 149
Scrolling Areas 152
Dock Windows and Toolbars 154
Multiple Document Interface 157
Event Processing 167
Reimplementing Event Handlers 167
Installing Event Filters 172
Staying Responsive during Intensive Processing 175
2D Graphics 179
Painting with QPainter 180
Coordinate System Transformations 185
High-Quality Rendering with QImage 193
Item-Based Rendering with Graphics View 195
Printing 217
Drag and Drop 227
Enabling Drag and Drop 227
Supporting Custom Drag Types 232
Clipboard Handling 237
Item View Classes 239
Using the Item View Convenience Classes 240
Using Predefined Models 247
Implementing Custom Models 252
Implementing Custom Delegates 266
Container Classes 273
Sequential Containers 274
Associative Containers 282
Generic Algorithms 285
Strings, Byte Arrays, and Variants 287
Input/Output 295
Reading and Writing Binary Data 296
Reading and Writing Text 301
Traversing Directories 307
Embedding Resources 308
Inter-Process Communication 309
Databases 315
Connecting and Querying 316
Viewing Tables 322
Editing Records Using Forms 324
Presenting Data in Tabular Forms 330
Multithreading 339
Creating Threads 340
Synchronizing Threads 343
Communicating with the Main Thread 349
Using Qt's Classes in Secondary Threads 356
Networking 359
Writing FTP Clients 359
Writing HTTP Clients 368
Writing TCP Client-Server Applications 371
Sending and Receiving UDP Datagrams 381
XML 387
Reading XML with QXmlStreamReader 388
Reading XML with DOM 395
Reading XML with SAX 400
Writing XML 404
Providing Online Help 407
Tooltips, Status Tips, and "What's This?" Help 407
Using a Web Browser to Provide Online Help 409
Using QTextBrowser as a Simple Help Engine 411
Using Qt Assistant for Powerful Online Help 414
Advanced Qt
Internationalization 419
Working with Unicode 420
Making Applications Translation-Aware 423
Dynamic Language Switching 429
Translating Applications 435
Look and Feel Customization 439
Using Qt Style Sheets 439
Subclassing QStyle 454
3D Graphics 471
Drawing Using OpenGL 471
Combining OpenGL and QPainter 477
Doing Overlays Using Framebuffer Objects 484
Creating Plugins 491
Extending Qt with Plugins 492
Making Applications Plugin-Aware 502
Writing Application Plugins 505
Application Scripting 509
Overview of the ECMAScript Language 510
Extending Qt Applications with Scripts 519
Implementing GUI Extensions Using Scripts 523
Automating Tasks through Scripting 530
Platform-Specific Features 543
Interfacing with Native APIs 543
Using ActiveX on Windows 547
Handling X11 Session Management 559
Embedded Programming 567
Getting Started with Qt/Embedded Linux 568
Customizing Qt/Embedded Linux 570
Integrating Qt Applications with Qtopia 571
Using Qtopia APIs 576
Appendixes
Obtaining and Installing Qt 589
Building Qt Applications 593
Introduction to Qt Jambi 605
Introduction to C++ for Java and C# Programmers 623
Index 665
Forewords & Introductions
Qt is a comprehensive C++ application development framework for creating cross-platform GUI applications using a "write once, compile anywhere" approach. Qt lets programmers use a single source tree for applications that will run on Windows 98 to Vista, Mac OS X, Linux, Solaris, HP-UX, and many other versions of Unix with X11. The Qt libraries and tools are also part of Qt/Embedded Linux, a product that provides its own window system on top of embedded Linux.
The purpose of this book is to teach you how to write GUI programs using Qt 4. The book starts with "Hello Qt" and quickly progresses to more advanced topics, such as creating custom widgets and providing drag and drop. The text is complemented by a set of examples that you can download from the book's web site, http://www.informit.com/title/0132354160. Appendix A explains how to download and install the software, including a free C++ compiler for those using Windows.
The book is divided into three parts. Part I covers all the fundamental concepts and practices necessary for programming GUI applications using Qt. Knowledge of this part alone is sufficient to write useful GUI applications. Part II covers central Qt topics in greater depth, and Part III provides more specialized and advanced material. You can read the chapters of Parts II and III in any order, but they assume familiarity with the contents of Part I. The book also includes several appendixes, with Appendix B showing how to build Qt applications and Appendix C introducing Qt Jambi, the Java version of Qt.
The first Qt 4 edition of the book built on the Qt 3 edition, although it was completely revised to reflect good idiomatic Qt 4programming techniques and included new chapters on Qt 4's model/view architecture, the new plugin framework, embedded programming with Qt/Embedded Linux, and a new appendix. This extended and revised second edition has been thoroughly updated to take advantage of features introduced in Qt versions 4.2 and 4.3, and includes new chapters on look and feel customization and application scripting as well as two new appendixes. The original graphics chapter has been split into separate 2D and 3D chapters, which between them now cover the new graphics view classes and QPainter's OpenGL back-end. In addition, much new material has been added to the database, XML, and embedded programming chapters.
This edition, like its predecessors, emphasizes explaining Qt programming and providing realistic examples, rather than simply rehashing or summarizing Qt's extensive online documentation. Because the book teaches solid Qt 4 programming principles and practices, readers will easily be able to learn the new Qt modules that come out in Qt 4.4, Qt 4.5, and later Qt 4.x versions. If you are using one of these later versions, be sure to read the "What's New in Qt 4.x" documents in the reference documentation to get an overview of the new features that are available.
We have written the book with the assumption that you have a basic knowledge of C++, Java, or C#. The code examples use a subset of C++, avoiding many C++ features that are rarely needed when programming Qt. In the few places where a more advanced C++ construct is unavoidable, it is explained as it is used. If you already know Java or C# but have little or no experience with C++, we recommend that you begin by reading Appendix D, which provides sufficient introduction to C++ to be able to use this book. For a more thorough introduction to object-oriented programming in C++, we recommend C++ How to Program by P. J. Deitel and H. M. Deitel (Prentice Hall, 2007), and C++ Primer by Stanley B. Lippman, Jos¿Lajoie, and Barbara E. Moo (Addison-Wesley, 2005).
Qt made its reputation as a cross-platform framework, but thanks to its intuitive and powerful API, many organizations use Qt for single-platform development. Adobe Photoshop Album is just one example of a mass-market Windows application written in Qt. Many sophisticated software systems in vertical markets, such as 3D animation tools, digital film processing, electronic design automation (for chip design), oil and gas exploration, financial services, and medical imaging, are built with Qt. If you are making a living with a successful Windows product written in Qt, you can easily create new markets in the Mac OS X and Linux worlds simply by recompiling.
Qt is available under various licenses. If you want to build commercial applica-tions, you must buy a commercial Qt license from Trolltech; if you want to build open source programs, you can use the open source (GPL) edition. The K Desktop Environment (KDE) and most of the open source applications that go with it are built on Qt.
In addition to Qt's hundreds of classes, there are add-ons that extend Qt's scope and power. Some of these products, like the Qt Solutions components, are avail-able from Trolltech, while others are supplied by other companies and by the open source community; see http://www.trolltech.com/products/qt/3rdparty/ for a list of available add-ons. Trolltech's developers also have their own web site, Trolltech Labs (http://labs.trolltech.com/), where they put unofficial code that they have written because it is fun, interesting, or useful. Qt has a well-established and thriving user community that uses the qt-interest mailing list; see http://lists.trolltech.com/ for details.
If you spot errors in the book, have suggestions for the next edition, or want to give us feedback, we would be delighted to hear from you. You can reach us at qt-book@trolltech.com. The errata will be placed on the book's web site http://www.informit.com/title/0132354160.