| |
| |
Foreword | |
| |
| |
About the Author | |
| |
| |
About the Technical Reviewer | |
| |
| |
Acknowledgments | |
| |
| |
| |
Getting to Know Qt | |
| |
| |
| |
The Qt Way of C++ | |
| |
| |
Installing a Qt Development Environment | |
| |
| |
Installing on Unix Platforms | |
| |
| |
Installing on Windows | |
| |
| |
Making C++ "Qt-er" | |
| |
| |
Inheriting Qt | |
| |
| |
Using a Qt String | |
| |
| |
Building a Qt Program | |
| |
| |
Signals, Slots, and Meta-Objects | |
| |
| |
Making the Connection | |
| |
| |
Revisiting the Build Process | |
| |
| |
Connection to Something New | |
| |
| |
Collections and Iterators | |
| |
| |
Iterating the QList | |
| |
| |
Filling the List | |
| |
| |
More Lists | |
| |
| |
Special Lists | |
| |
| |
Summary | |
| |
| |
| |
Rapid Application Development Using Qt | |
| |
| |
The Sketch | |
| |
| |
Event-Driven Applications | |
| |
| |
Using Designer | |
| |
| |
From Designer to Code | |
| |
| |
The Final Touches | |
| |
| |
Summary | |
| |
| |
| |
Widgets and Layouts | |
| |
| |
Creating Dialogs in Qt | |
| |
| |
Size Policies | |
| |
| |
Layouts | |
| |
| |
Common Widgets | |
| |
| |
QPushButton | |
| |
| |
QLabel | |
| |
| |
QLineEdit | |
| |
| |
QCheckBox | |
| |
| |
QRadioButton | |
| |
| |
QGroupBox | |
| |
| |
QListWidget | |
| |
| |
QComboBox | |
| |
| |
QSpinBox | |
| |
| |
QSlider | |
| |
| |
QProgressBar | |
| |
| |
Common Dialogs | |
| |
| |
Files | |
| |
| |
Messages | |
| |
| |
Even More Dialogs | |
| |
| |
Validating User Input | |
| |
| |
Validators | |
| |
| |
Summary | |
| |
| |
| |
The Main Window | |
| |
| |
Windows and Documents | |
| |
| |
Single Document Interface | |
| |
| |
Multiple Document Interface | |
| |
| |
Comparing Single and Multiple Document Interfaces | |
| |
| |
Application Resources | |
| |
| |
Resource File | |
| |
| |
Project File | |
| |
| |
Application Icon | |
| |
| |
Dockable Widgets | |
| |
| |
Summary | |
| |
| |
| |
The Qt Building Blocks | |
| |
| |
| |
The Model-View Framework | |
| |
| |
Showing Data by Using Views | |
| |
| |
Providing Headers | |
| |
| |
Limiting Editing | |
| |
| |
Limiting Selection Behavior | |
| |
| |
A Single Column List | |
| |
| |
Creating Custom Views | |
| |
| |
A Delegate for Drawing | |
| |
| |
Custom Editing | |
| |
| |
Creating Your Own Views | |
| |
| |
Creating Custom Models | |
| |
| |
A Read-Only Table Model | |
| |
| |
A Tree of Your Own | |
| |
| |
Editing the Model | |
| |
| |
Sorting and Filtering Models | |
| |
| |
Summary | |
| |
| |
| |
Creating Widgets | |
| |
| |
Composing Widgets | |
| |
| |
Changing and Enhancing Widgets | |
| |
| |
Catching the Events | |
| |
| |
Creating Custom Widgets from Scratch | |
| |
| |
Your Widgets and Designer | |
| |
| |
Promotion | |
| |
| |
Providing a Plugin | |
| |
| |
Summary | |
| |
| |
| |
Drawing and Printing | |
| |
| |
Drawing Widgets | |
| |
| |
The Drawing Operations | |
| |
| |
Transforming the Reality | |
| |
| |
Painting Widgets | |
| |
| |
The Graphics View | |
| |
| |
Interacting Using a Custom Item | |
| |
| |
Printing | |
| |
| |
OpenGL | |
| |
| |
Summary | |
| |
| |
| |
Files, Streams, and XML | |
| |
| |
Working with Paths | |
| |
| |
Working with Files | |
| |
| |
Working with Streams | |
| |
| |
XML | |
| |
| |
DOM | |
| |
| |
Reading XML Files with SAX | |
| |
| |
Files and the Main Window | |
| |
| |
Summary | |
| |
| |
| |
Providing Help | |
| |
| |
Creating Tooltips | |
| |
| |
Creating HTML-Formatted Tooltips | |
| |
| |
Inserting Images into Tooltips | |
| |
| |
Applying Multiple Tooltips to a Widget | |
| |
| |
Providing What's This Help Tips | |
| |
| |
Embedding Links into What's This Help Tips | |
| |
| |
Taking Advantage of the Status Bar | |
| |
| |
Creating Wizards | |
| |
| |
Assisting the User | |
| |
| |
Creating the Help Documentation | |
| |
| |
Putting It Together | |
| |
| |
Summary | |
| |
| |
| |
Internationalization and Localization | |
| |
| |
Translating an Application | |
| |
| |
Extracting the Strings | |
| |
| |
Linguist: A Tool for Translating | |
| |
| |
Set Up a Translation Object | |
| |
| |
Qt Strings | |
| |
| |
Dealing with Other Translation Cases | |
| |
| |
Find the Missing Strings | |
| |
| |
Translating on the Fly | |
| |
| |
Other Considerations | |
| |
| |
Dealing with Text | |
| |
| |
Images | |
| |
| |
Numbers | |
| |
| |
Dates and Times | |
| |
| |
Help | |
| |
| |
Summary | |
| |
| |
| |
Plugins | |
| |
| |
Plugin Basics | |
| |
| |
Extending Qt with Plugins | |
| |
| |
Creating an ASCII Art Plugin | |
| |
| |
Extending Your Application Using Plugins | |
| |
| |
Filtering Images | |
| |
| |
Merging the Plugin and the Application | |
| |
| |
A Factory Interface | |
| |
| |
Non-Qt Plugins | |
| |
| |
Summary | |
| |
| |
| |
Doing Things in Parallel | |
| |
| |
Basic Threading | |
| |
| |
Building a Simple Threading Application | |
| |
| |
Synchronizing Safely | |
| |
| |
Protecting Your Data | |
| |
| |
Protected Counting | |
| |
| |
Locking for Reading and Writing | |
| |
| |
Sharing Resources Among Threads | |
| |
| |
Getting Stuck | |
| |
| |
Producers and Consumers | |
| |
| |
Signaling Across the Thread Barrier | |
| |
| |
Passing Strings Between Threads | |
| |
| |
Sending Your Own Types Between Threads | |
| |
| |
Threads, QObjects, and Rules | |
| |
| |
Pitfalls when Threading | |
| |
| |
The User Interface Thread | |
| |
| |
Working with Processes | |
| |
| |
Running uic | |
| |
| |
The Shell and Directions | |
| |
| |
Summary | |
| |
| |
| |
Databases | |
| |
| |
A Quick Introduction to SQL | |
| |
| |
What Is a Database? | |
| |
| |
Inserting, Viewing, Modifying, and Deleting Data | |
| |
| |
More Tables Mean More Power | |
| |
| |
Counting and Calculating | |
| |
| |
Qt and Databases | |
| |
| |
Making the Connection | |
| |
| |
Querying Data | |
| |
| |
Establishing Several Connections | |
| |
| |
Putting It All Together | |
| |
| |
The Structure of the Application | |
| |
| |
The User Interface | |
| |
| |
The Database Class | |
| |
| |
Putting Everything Together | |
| |
| |
Model Databases | |
| |
| |
The Query Model | |
| |
| |
The Table Model | |
| |
| |
The Relational Table Model | |
| |
| |
Summary | |
| |
| |
| |
Networking | |
| |
| |
Using the QtNetwork Module | |
| |
| |
Working with Client Protocols | |
| |
| |
Creating an FTP Client | |
| |
| |
Creating an HTTP Client | |
| |
| |
Sockets | |
| |
| |
Reliability's Role with UDP and TCP | |
| |
| |
Servers, Clients, and Peers | |
| |
| |
Sending Images Using TCP | |
| |
| |
Broadcasting Pictures Using UDP | |
| |
| |
Summary | |
| |
| |
| |
Building Qt Projects | |
| |
| |
QMake | |
| |
| |
The QMake Project File | |
| |
| |
Working with Different Platforms | |
| |
| |
Building Libraries with QMake | |
| |
| |
Building Complex Projects with QMake | |
| |
| |
The CMake Build System | |
| |
| |
Managing a Simple Application with QMake | |
| |
| |
Working with Different Platforms | |
| |
| |
Building Libraries with CMake | |
| |
| |
Managing Complex Projects with CMake | |
| |
| |
Summary | |
| |
| |
| |
Unit Testing | |
| |
| |
Unit Testing and Qt | |
| |
| |
The Structure of a Test | |
| |
| |
Testing Dates | |
| |
| |
Implementing the Tests | |
| |
| |
Data-Driven Testing | |
| |
| |
Testing Widgets | |
| |
| |
Testing a Spin Box | |
| |
| |
Driving Widgets with Data | |
| |
| |
Testing Signals | |
| |
| |
Testing for Real | |
| |
| |
The Interface | |
| |
| |
The Tests | |
| |
| |
Handling Deviations | |
| |
| |
Summary | |
| |
| |
| |
Appendixes | |
| |
| |
| |
Third-Party Tools | |
| |
| |
Qt Widgets for Technical Applications: Qwt | |
| |
| |
wwWidgets | |
| |
| |
QDevelop | |
| |
| |
Edyuk | |
| |
| |
| |
Containers, Types, and Macros | |
| |
| |
Containers | |
| |
| |
Sequences | |
| |
| |
Specialized Containers | |
| |
| |
Associative Containers | |
| |
| |
Types | |
| |
| |
Types by Size | |
| |
| |
The Variant Type | |
| |
| |
Macros and Functions | |
| |
| |
Treating Values | |
| |
| |
Random Values | |
| |
| |
Iterating | |
| |
| |
Index | |