HAPPY BOOKSGIVING
Use code BOOKSGIVING during checkout to save 40%-55% on books and eBooks. Shop now.
Register your product to gain access to bonus material or receive a coupon.
This PDF will be accessible from your Account page after purchase and requires PDF reading software, such as Acrobat® Reader®.
The eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
Master C++ “The Qt Way” with Modern Design Patterns and Efficient Reuse
This fully updated, classroom-tested book teaches C++ “The Qt Way,” emphasizing design patterns and efficient reuse. Readers will master both the C++ language and Qt libraries, as they learn to develop maintainable software with well-defined code layers and simple, reusable classes and functions.
Every chapter of this edition has been improved with new content, better organization, or both. Readers will find extensively revised coverage of QObjects, Reflection, Widgets, Main Windows, Models and Views, Databases, Multi-Threaded Programming, and Reflection. This edition introduces the powerful new Qt Creator IDE; presents new multimedia APIs; and offers extended coverage of Qt Designer and C++ Integration. It has been
restructured to help readers start writing software immediately and write robust, effective software sooner.
The authors introduce several new design patterns, add many quiz questions and labs, and present more efficient solutions relying on new Qt features and best practices. They also provide an up-to-date C++ reference section and a complete application case study.
Click here to obtain supplementary materials for this book.
Foreword xv
Preface xix
Preface to the Second Edition xxii
Acknowledgments xxv
About the Authors xxx
Part I: Design Patterns and Qt 4 1
Chapter 1: C++ Introduction 3
1.1 Overview of C++ 3
1.2 A Brief History of C++ 4
1.3 C++ First Example 5
1.4 Standard Input and Output 8
1.5 Introduction to Functions 11
1.6 qmake, Project Files, and Makefile 17
1.7 Getting Help Online 24
1.8 Strings 24
1.9 Streams 26
1.10 File Streams 29
1.11 Qt Dialogs for User Input/Output 34
1.12 Identifiers, Types, and Literals 37
1.13 C++ Simple Types 40
1.14 The Keyword const 52
1.15 Pointers and Memory Access 54
1.16 Reference Variables 60
1.17 const* and *const 61
1.18 Review Questions 64
Chapter 2: Top of the class 67
2.1 First, There Was struct 67
2.2 Class Definitions 69
2.3 Member Access Specifiers 71
2.4 Encapsulation 74
2.5 Introduction to UML 75
2.6 Friends of a Class 76
2.7 Constructors 77
2.8 Destructors 80
2.9 The Keyword static 81
2.10 Class Declarations and Definitions 86
2.11 Copy Constructors and Assignment Operators 88
2.12 Conversions 92
2.13 const Member Functions 95
2.14 Subobjects 97
2.15 Exercise: Classes 98
2.16 Review Questions 108
Chapter 3: Introduction to Qt 113
3.1 Style Guidelines, Naming Conventions 114
3.2 The Qt Core Module 116
3.3 QtCreator—An IDE for Qt Programming 119
3.4 Exercises: Introduction to Qt 120
3.5 Review Questions 121
Chapter 4: Lists 122
4.1 Introduction to Containers 122
4.2 Iterators 123
4.3 Relationships 129
4.4 Exercise: Relationships 132
4.5 Review Questions 134
Chapter 5: Functions 135
5.1 Overloading Functions 135
5.2 Optional Arguments 138
5.3 Operator Overloading 141
5.4 Parameter Passing by Value 146
5.5 Parameter Passing by Reference 148
5.6 References to const 152
5.7 Function Return Values 154
5.8 Returning References from Functions 154
5.9 Overloading on const 155
5.10 inline Functions 158
5.11 Functions with Variable-Length Argument Lists 162
5.12 Exercise: Encryption 164
5.13 Review Questions 167
Chapter 6: Inheritance and Polymorphism 168
6.1 Simple Derivation 168
6.2 Derivation with Polymorphism 177
6.3 Derivation from an Abstract Base Class 184
6.4 Inheritance Design 189
6.5 Overloading, Hiding, and Overriding 191
6.6 Constructors, Destructors, and Copy Assignment Operators 193
6.7 Processing Command-Line Arguments 198
6.8 Containers 204
6.9 Managed Containers, Composites, and Aggregates 206
6.10 Containers of Pointers 210
6.11 Review Questions 228
Chapter 7: Libraries and Design Patterns 234
7.1 Building and Reusing Libraries 236
7.2 Exercise: Installing Libraries 244
7.3 Frameworks and Components 247
7.4 Design Patterns 248
7.5 Review Questions 257
Chapter 8: QObject, QApplication, Signals, and Slots 259
8.1 Values and Objects 263
8.2 Composite Pattern: Parents and Children 264
8.3 QApplication and the Event Loop 272
8.4 Q_OBJECT and moc: A checklist 274
8.5 Signals and Slots 275
8.6 QObject Lifecycle 277
8.7 QTestLib 277
8.8 Exercises: QObject, QApplication, Signals, and Slots 282
8.9 Review Questions 282
Chapter 9: Widgets and Designer 283
9.1 Widget Categories 284
9.2 Designer Introduction 286
9.3 Dialogs 290
9.4 Form Layout 292
9.5 Icons, Images, and Resources 295
9.6 Layout of Widgets 298
9.7 Designer Integration with Code 306
9.8 Exercise: Input Forms 313
9.9 The Event Loop: Revisited 314
9.10 Paint Events, Drawing Images 323
9.11 Review Questions 325
Chapter 10: Main Windows and Actions 326
10.1 QActions, QMenus, and QMenuBars 327
10.2 Regions and QDockWidgets 337
10.3 QSettings: Saving and Restoring Application State 339
10.4 Clipboard and Data Transfer Operations 341
10.5 The Command Pattern 343
10.6 tr() and Internationalization 351
10.7 Exercises: Main Windows and Actions 352
10.8 Review Questions 353
Chapter 11: Generics and Containers 355
11.1 Generics and Templates 355
11.2 Generics, Algorithms, and Operators 362
11.3 Sorted Map Example 365
11.4 Function Pointers and Functors 368
11.5 Flyweight Pattern: Implicitly Shared Classes 371
11.6 Exercise: Generics 375
11.7 Review Questions 376
Chapter 12: Meta Objects, Properties, and Reflective Programming 378
12.1 QMetaObject—The MetaObject Pattern 378
12.2 Type Identification and qobject_cast 380
12.3 Q_PROPERTY Macro—Describing QObject Properties 383
12.4 QVariant Class: Accessing Properties 386
12.5 Dynamic Properties 389
12.6 MetaTypes, Declaring, and Registering 394
12.7 invokeMethod() 396
12.8 Exercises: Reflection 397
12.9 Review Questions 397
Chapter 13: Models and Views 399
13.1 Model-View-Controller (MVC) 400
13.2 Qt Models and Views 402
13.3 Table Models 414
13.4 Tree Models 424
13.5 Smarter Pointers 429
13.6 Exercises: Models and Views 431
13.7 Review Questions 433
Chapter 14: Validation and Regular Expressions 434
14.1 Input Masks 435
14.2 Validators 438
14.3 Regular Expressions 440
14.4 Regular Expression Validation 449
14.5 Subclassing QValidator 451
14.6 Exercises: Validation and Regular Expressions 454
14.7 Review Questions 456
Chapter 15: Parsing XML 457
15.1 The Qt XML Parsers 460
15.2 SAX Parsing 462
15.3 XML, Tree Structures, and DOM 466
15.4 XML Streams 476
15.5 Review Questions 479
Chapter 16: More Design Patterns 481
16.1 Creational Patterns 481
16.2 Memento Pattern 491
16.3 Façade Pattern 498
16.4 Review Questions 505
Chapter 17: Concurrency 506
17.1 QProcess and Process Control 506
17.2 QThread and QtConcurrent 522
17.3 Exercises: QThread and QtConcurrent 536
17.4 Review Questions 537
Chapter 18: Database Programming 539
18.1 QSqlDatabase: Connecting to SQL from Qt 541
18.2 Queries and Result Sets 546
18.3 Database Models 548
18.4 Review Questions 549
Part II: C++ Language Reference 550
Chapter 19: Types and Expressions 552
19.1 Operators 553
19.2 Statements and Control Structures 557
19.3 Evaluation of Logical Expressions 564
19.4 Enumerations 565
19.5 Signed and Unsigned Integral Types 567
19.6 Standard Expression Conversions 570
19.7 Explicit Conversions 574
19.8 Safer Typecasting Using ANSI C++ Typecasts 574
19.9 Overloading Special Operators 581
19.10 Runtime Type Identification 587
19.11 Member Selection Operators 590
19.12 Exercises: Types and Expressions 592
19.13 Review Questions 594
Chapter 20: Scope and Storage Class 595
20.1 Declarations and Definitions 595
20.2 Identifier Scope 597
20.3 Storage Class 606
20.4 Namespaces 610
20.5 Review Questions 615
Chapter 21: Memory Access 617
21.1 Pointer Pathology 618
21.2 Further Pointer Pathology with Heap Memory 620
21.3 Memory Access Summary 623
21.4 Introduction to Arrays 624
21.5 Pointer Arithmetic 626
21.6 Arrays, Functions, and Return Values 627
21.7 Different Kinds of Arrays 629
21.8 Valid Pointer Operations 629
21.9 Arrays and Memory: Important Points 632
21.10 Exercises: Memory Access 633
21.11 Review Questions 634
Chapter 22: Inheritance in Detail 635
22.1 virtual Pointers, virtual Tables 635
22.2 Polymorphism and virtual Destructors 638
22.3 Multiple Inheritance 642
22.4 public, protected, and private Derivation 650
22.5 Review Questions 652
Part III: Programming Assignments 653
Chapter 23: MP3 Jukebox Assignments 655
23.1 Phonon/MultiMediaKit Setup 657
23.2 Playlist 657
23.3 Playlists 658
23.4 Source Selector 659
23.5 Database Playlists 661
23.6 Star Delegates 661
23.7 Sorting, Filtering, and Editing Playlists 661
Appendix A: C++ Reserved Keywords 662
Appendix B: Standard Headers 664
Appendix C: Development Tools 666
Appendix D: Alan’s Quick Start Guide to Debian for Programmers 691
Appendix E: C++/Qt Setup 698
Bibliography 706
Index 709