Home > Store

Introduction to Design Patterns in C++ with Qt, 2nd Edition

Register your product to gain access to bonus material or receive a coupon.

Introduction to Design Patterns in C++ with Qt, 2nd Edition


  • Sorry, this book is no longer in print.
Not for Sale



  • A tutorial, reference guide, and textbook rolled into one: learn to write elegant cross-platform GUI applications that maximize code reuse
  • Thoroughly updated to teach more design patterns and highly-efficient new techniques based on new Nokia Qt 4.7/4.6 classes
  • Assumes no prior knowledge of C, C++, or objects: teaches best practices "from the ground up"


  • Copyright 2012
  • Dimensions: 7" x 9-1/8"
  • Pages: 768
  • Edition: 2nd
  • Book
  • ISBN-10: 0-13-282645-3
  • ISBN-13: 978-0-13-282645-7

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.

  • Master C++ keywords, literals, identifiers, declarations, types, and type conversions.
  • Understand classes and objects, organize them, and describe their interrelationships.
  • Learn consistent programming style and naming rules.
  • Use lists, functions, and other essential techniques.
  • Define inheritance relationships to share code and promote reuse.
  • Learn how code libraries are designed, built, and reused.
  • Work with QObject, the base class underlying much of Qt.
  • Build graphical user interfaces with Qt widgets.
  • Use templates to write generic functions and classes.
  • Master advanced reflective programming techniques.
  • Use the Model-View framework to cleanly separate data and GUI classes.
  • Validate input using regular expressions and other techniques.
  • Parse XML data with SAX, DOM, and QXmlStreamReader.
  • Master today’s most valuable creational and structural design patterns.
  • Create, use, monitor, and debug processes and threads.
  • Access databases with Qt’s SQL classes.
  • Manage memory reliably and efficiently.
  • Understand how to effectively manage QThreads and use QtConcurrent algorithms.

Click here to obtain supplementary materials for this book.



Download free source code files here

Sample Content

Online Sample Chapter

Introduction to Design Patterns in C++ with Qt: Models and Views

Table of Contents

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


Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information

To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.


Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.


If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information

Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.


This site is not directed to children under the age of 13.


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information

If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information

Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents

California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure

Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact

Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice

We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020