| Preface | p. xi |
| Introduction | p. 1 |
| Why GUI Toolkits? | p. 1 |
| Why Portability? | p. 3 |
| Why Qt? | p. 3 |
| Implementing Cross-Platform GUI Libraries | p. 4 |
| Acquiring Qt | p. 6 |
| Compiling and Installing Qt | p. 8 |
| C++ as Used by Qt | p. 16 |
| Getting Help | p. 17 |
| First Steps in Qt Programming | p. 19 |
| Hello, world! | p. 19 |
| Using the Qt Reference Documentation | p. 23 |
| Adding an Exit Button | p. 26 |
| Introduction to Signals and Slots | p. 28 |
| Event Handling and Simple Drawings with QPainter | p. 37 |
| Learning More About Qt | p. 45 |
| Adding Menus | p. 45 |
| Adding a Scrolled View | p. 55 |
| Adding a Context Menu | p. 63 |
| File I/O | p. 71 |
| A Guided Tour Through the Simple Widgets | p. 81 |
| General Widget Parameters | p. 85 |
| Widget Styles | p. 86 |
| Buttons | p. 88 |
| Selection Widgets | p. 91 |
| Widgets for Bounded-Range Input | p. 95 |
| Scrollbars | p. 100 |
| Menu-Related Widgets | p. 102 |
| Arrangers | p. 103 |
| Tab-Related Widgets | p. 108 |
| Text-Entry Fields | p. 108 |
| Labels | p. 110 |
| Widgets for the Office | p. 113 |
| Progress Bars | p. 120 |
| Scrolled Views | p. 121 |
| List Views | p. 122 |
| Icon Views | p. 128 |
| Widgets for Tabular Material | p. 129 |
| Widgets for Displaying Rich Text | p. 132 |
| A Guided Tour Through the Qt Dialog Boxes | p. 134 |
| Predfined Dialog Boxes | p. 134 |
| Building Blocks for Your Own Dialog Boxes | p. 145 |
| Using Layout Managers | p. 155 |
| Layout Manager Basics | p. 155 |
| Laying Out Widgets in Rows and Columns | p. 157 |
| Nested Layout Managers | p. 160 |
| Grid Layout | p. 162 |
| Implicit Geometry Management | p. 164 |
| Some Thoughts on GUI Design | p. 167 |
| Container Classes | p. 173 |
| Available Container Classes | p. 174 |
| Choosing a Container Class | p. 176 |
| Working with Reference-Based Container Classes | p. 177 |
| Working with Value-Based Container Classes | p. 181 |
| Graphics | p. 184 |
| Animations | p. 184 |
| Printing | p. 186 |
| Managing Colors | p. 191 |
| Basic QPainter: Drawing Figures | p. 196 |
| Advanced QPainter | p. 198 |
| Double-Buffering and Other Nifty Techniques | p. 203 |
| Independently Movable Objects with QCanvas | p. 208 |
| Working with Styles | p. 213 |
| Loading and Saving Custom Image Formats | p. 215 |
| Setting a Cursor | p. 218 |
| Text Processing | p. 219 |
| Internationalization and Localization of On-Screen Text | p. 219 |
| Validating User Input | p. 227 |
| Working with Regular Expressions | p. 232 |
| Reading and Writing XML Files | p. 237 |
| Rich Text | p. 245 |
| Working with Files and Directories | p. 248 |
| Reading a Text File | p. 248 |
| Traversing a Directory | p. 251 |
| File Information | p. 253 |
| Reading and Writing Configuration Data | p. 254 |
| Interapplication Communication | p. 258 |
| Using the Clipboard | p. 258 |
| Drag-and-Drop | p. 259 |
| Interfacing with the Operating System | p. 265 |
| Working with Date and Time Values | p. 265 |
| Loading Code Libraries Dynamically | p. 266 |
| Spawning Child Processes | p. 269 |
| Playing Sounds | p. 271 |
| Writing Your Own Widgets | p. 274 |
| Implementing a Coordinate Selector | p. 276 |
| Implementing a Browse Box | p. 285 |
| Focus Handling | p. 299 |
| Advanced Event Handling | p. 302 |
| Event Filters | p. 302 |
| Sending Synthetic Events | p. 304 |
| Advanced Signals and Slots | p. 306 |
| Signals and Slots Revisited | p. 306 |
| Connecting Several Buttons to One Slot | p. 309 |
| Actions | p. 310 |
| Providing Help | p. 313 |
| Accessing Databases | p. 317 |
| Installation of the SQL Module | p. 319 |
| Connecting to a Database | p. 320 |
| Simple Data Retrieval | p. 322 |
| Data Retrieval with Cursors | p. 325 |
| Data Display | p. 328 |
| Data Manipulation | p. 337 |
| Anything Else? | p. 341 |
| Multithreading | p. 343 |
| Configuring Qt for Multithreading | p. 344 |
| Using Qt's Multithreading Classes | p. 344 |
| Multithreading Pitfalls | p. 348 |
| Alternatives to Multithreading | p. 348 |
| Debugging | p. 350 |
| Portability | p. 353 |
| Why Portability Is Desirable | p. 353 |
| How to Write Portable Programs | p. 355 |
| Danger Ahead: When Even Qt Is Not Portable | p. 356 |
| Building Projects Portably with qmake | p. 360 |
| Qt Network Programming | p. 365 |
| Low-Level Socket Access | p. 365 |
| Higher-Level Network Access | p. 370 |
| Interfacing Qt with Other Languages and Libraries | p. 375 |
| OpenGL Programming with Qt | p. 375 |
| Writing Netscape Plug-ins | p. 379 |
| Integrating Xt Widgets | p. 387 |
| Interfacing Qt with Perl | p. 389 |
| Using the Visual C++ IDE for Qt Programs | p. 397 |
| Importing an Existing Makefile | p. 397 |
| Creating Your Own Project from Scratch | p. 398 |
| Using qmake to Create a Project File | p. 399 |
| Using the MS Visual Studio Integration | p. 399 |
| Visual Design with Qt Designer | p. 400 |
| Why Do You Need A GUI Designer? | p. 400 |
| Creating a Simple Application with the Help of Qt Designer | p. 401 |
| Adding Functionality to a Dialog Box by Subclassing | p. 418 |
| Using Layout Management | p. 427 |
| Useful Techniques | p. 436 |
| Answers to Exercises | p. 455 |
| Bibliography | p. 477 |
| Index | p. 479 |
| Table of Contents provided by Syndetics. All Rights Reserved. |