Monday, December 19, 2011

C++ GUI Programming with Qt.3






Contents
Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
A Brief History of Qt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
Part I: Basic Qt
1. Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Hello Qt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Making Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Using the Reference Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2. Creating Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Subclassing QDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Signals and Slots in Depth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Rapid Dialog Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Shape-Changing Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Dynamic Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Built-in Widget and Dialog Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3. Creating Main Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Subclassing QMainWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Creating Menus and Toolbars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Implementing the File Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Setting Up the Status Bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Using Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Storing Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Multiple Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Splash Screens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4. Implementing Application Functionality . . . . . . . . . . . . . . . . . . . . 69
The Central Widget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Subclassing QTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Loading and Saving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Implementing the Edit Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Implementing the Other Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Subclassing QTableItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5. Creating Custom Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Customizing Qt Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Subclassing QWidget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Integrating Custom Widgets with Qt Designer . . . . . . . . . . . . . . . . 108
Double Buffering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Part II: Intermediate Qt
6. Layout Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Basic Layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Splitters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Widget Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Scroll Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Dock Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Multiple Document Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
7. Event Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Reimplementing Event Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Installing Event Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Staying Responsive During Intensive Processing . . . . . . . . . . . . . . 171
8. 2D and 3D Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Painting with QPainter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Graphics with QCanvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Graphics with OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
9. Drag and Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Enabling Drag and Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Supporting Custom Drag Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Advanced Clipboard Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
10. Input/Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Reading and Writing Binary Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Reading and Writing Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Handling Files and Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Inter-Process Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
11. Container Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Pointer-Based Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
QString and QVariant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
12. Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Connecting and Querying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Presenting Data in Tabular Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Creating Data-Aware Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
13. Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Using QFtp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Using QHttp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
TCP Networking with QSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
UDP Networking with QSocketDevice . . . . . . . . . . . . . . . . . . . . . . . . 301
14. XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Reading XML with SAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Reading XML with DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Writing XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
15. Internationalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Working with Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Making Applications Translation-Aware . . . . . . . . . . . . . . . . . . . . . . 323
Dynamic Language Switching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Translating Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
16. Providing Online Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Tooltips, Status Tips, and “What’s This?” Help . . . . . . . . . . . . . . . . . 339
Using QTextBrowser as a Simple Help Engine . . . . . . . . . . . . . . . . 342
Using Qt Assistant for Powerful Online Help . . . . . . . . . . . . . . . . . . 346
17. Multithreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Working with Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Communicating with the GUI Thread . . . . . . . . . . . . . . . . . . . . . . . . 359
Using Qt’s Classes in Non-GUI Threads . . . . . . . . . . . . . . . . . . . . . . . 363
18. Platform-Speciļ¬c Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Interfacing with Native APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Using ActiveX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Session Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Appendices
A. Installing Qt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
A Note on Licensing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Installing Qt/Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Installing Qt/Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Installing Qt/X11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
B. Qt’s Class Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

Another Programming Language Books
Another C++ Books
Download

No comments:

Post a Comment

Related Posts with Thumbnails

Put Your Ads Here!