Introduction to Design Patterns in C++ with Qt

Second Edition

(Hypertext Version)

Solutions Guide and Instructor's Notes

Alan Ezust

Paul Ezust

Although every reasonable effort has been made to incorporate accurate and useful information into this book, it is provided "as is" without expressed or implied warranty. If you find a mistake or want to make a suggestion/contribution, please open a ticket in our Bugzilla Database.

Abstract

C++ is taught "The Qt way," with an emphasis on design patterns and reuse of open source libraries and tools. By the end of the book, you should have a deep understanding of both the language and libraries and also the design patterns used in developing software with them.


Dedication

This book is dedicated to Miriam Ezust, without whom none of our work would have been possible.

Table of Contents

Foreword
Preface
Preface to the Second Edition
Acknowledgments
Rationale for the Book
Instructor Notes
I. Design Patterns and Qt
1. C++ Introduction
1.1. Overview of C++
1.2. A Brief History of C++
1.3. C++ First Example
1.4. Standard Input and Output
1.4.1. Exercises: Standard Input and Output
1.5. Introduction to Functions
1.5.1. Exercises: Introduction to Functions
1.6. qmake, Project Files, and Makefile
1.6.1. #include: Finding Header Files
1.7. Getting Help Online
1.8. Strings
1.9. Streams
1.10. File Streams
1.10.1. Exercises: File Streams
1.11. Qt Dialogs for User Input/Output
1.11.1. Exercises: Qt Dialogs for User Input/Output
1.12. Identifiers, Types, and Literals
1.12.1. Exercises: Identifiers, Types, and Literals
1.13. C++ Simple Types
1.13.1. main, and Command-Line Arguments
1.13.2. Arithmetic
1.13.3. Exercises: C++ Simple Types
1.14. The Keyword const
1.15. Pointers and Memory Access
1.15.1. The Unary Operators & and *
1.15.2. Operators new and delete
1.15.3. Exercises: Pointers and Memory Access
1.16. Reference Variables
1.17. const* and *const
1.18. Review Questions
1.18.1. Points of Departure
2. Top of the class
2.1. First, There Was struct
2.2. Class Definitions
2.3. Member Access Specifiers
2.4. Encapsulation
2.5. Introduction to UML
2.5.1. UML Relationships
2.6. Friends of a Class
2.7. Constructors
2.8. Destructors
2.9. The Keyword static
2.10. Class Declarations and Definitions
2.11. Copy Constructors and Assignment Operators
2.12. Conversions
2.13. const Member Functions
2.14. Subobjects
2.15. Exercise: Classes
2.16. Review Questions
3. Introduction to Qt
3.1. Style Guidelines, Naming Conventions
3.2. The Qt Core Module
3.2.1. Streams and Dates
3.3. QtCreator – An IDE for Qt Programming
3.4. Exercises: Introduction to Qt
3.5. Review Questions
3.5.1. Points of Departure
4. Lists
4.1. Introduction to Containers
4.2. Iterators
4.2.1. QStringList and iteration
4.2.2. QDir, QFileInfo, QDirIterator
4.3. Relationships
4.3.1. Relationships Summary
4.4. Exercise: Relationships
4.5. Review Questions
5. Functions
5.1. Overloading Functions
5.1.1. Exercises: Overloading Functions
5.2. Default (Optional) Arguments
5.3. Operator Overloading
5.3.1. Exercises: Operator Overloading
5.4. Parameter Passing by Value
5.5. Parameter Passing by Reference
5.6. References to const
5.7. Function Return Values
5.8. Returning References from Functions
5.9. Overloading on const
5.9.1. Exercises: Overloading on const
5.10. inline Functions
5.10.1. Inlining Versus Macro Expansion
5.11. Functions with Variable-Length Argument Lists
5.12. Exercise: Encryption
5.13. Review Questions
6. Inheritance and Polymorphism
6.1. Simple Derivation
6.1.1. Inheritance Client Code Example
6.1.2. Exercises: Simple Derivation
6.2. Derivation with Polymorphism
6.2.1. Exercises: Derivation with Polymorphism
6.3. Derivation from an Abstract Base Class
6.4. Inheritance Design
6.5. Overloading, Hiding, and Overriding
6.6. Constructors, Destructors, and Copy Assignment Operators
6.7. Processing Command-Line Arguments
6.7.1. Derivation and ArgumentList
6.7.2. Exercises: Processing Command-Line Arguments
6.8. Containers
6.9. Managed Containers, Composites and Aggregates
6.9.1. Exercises: Managed Containers, Composites and Aggregates
6.10. Containers of Pointers
6.10.1. Exercises: Containers of Pointers
6.11. Review Questions
7. Libraries and Design Patterns
7.1. Building and Reusing Libraries
7.1.1. Organizing Libraries: Dependency Management
7.1.2. Installing Libraries
7.2. Exercise: Installing Libraries
7.3. Frameworks and Components
7.4. Design Patterns
7.4.1. Serializer Pattern: QTextStream and QDataStream
7.4.2. AntiPatterns
7.4.2.1. Points of Departure
7.5. Review Questions
8. QObject, QApplication, Signals, and Slots
8.1. Values and Objects
8.2. Composite Pattern: Parents and Children
8.2.1. Finding Children
8.2.2. QObject's Child Managment
8.2.2.1. Exercises: QObject's Child Managment
8.3. QApplication and the Event Loop
8.4. Q_OBJECT and moc: A checklist
8.5. Signals and Slots
8.5.1. Points of Departure
8.6. QObject Lifecycle
8.7. QTestLib
8.8. Exercises: QObject, QApplication, Signals, and Slots
8.9. Review Questions
9. Widgets and Designer
9.1. Widget Categories
9.2. Designer Introduction
9.3. Dialogs
9.4. Form Layout
9.5. Icons, Images and Resources
9.6. Layout of Widgets
9.6.1. Spacing, Stretching, and Struts
9.6.2. Size Policy and Size Hint
9.6.3. Exercises: Layout of Widgets
9.7. Designer Integration with Code
9.7.1. QtCreator Integration with Designer
9.8. Exercise: Input Forms
9.9. The Event Loop: Revisited
9.9.1. QTimer
9.9.1.1. Exercises: QTimer
9.10. Paint Events, Drawing Images
9.11. Review Questions
10. MainWindows and Actions
10.1. QActions, QMenus, and QMenuBars
10.1.1. QActions, QToolbars, and QActionGroups
10.1.2. Exercise: CardGame GUI
10.2. Regions and QDockWidgets
10.3. QSettings: Saving and Restoring Application State
10.4. Clipboard and Data Transfer Operations
10.5. The Command Pattern
10.5.1. QUndoCommand and Image Manipulation
10.5.1.1. Exercises: QUndoCommand and Image Manipulation
10.6. tr() and Internationalization
10.7. Exercises: MainWindows
10.8. Review Questions
11. Generics and Containers
11.1. Generics and Templates
11.1.1. Function Templates
11.1.1.1. Exercises: Function Templates
11.1.2. Class Templates
11.1.3. Exercises: Generics and Templates
11.2. Generics, Algorithms, and Operators
11.2.1. Exercises: Generics, Algorithms, and Operators
11.3. Sorted Map Example
11.4. Function Pointers and Functors
11.5. Flyweight Pattern: Implicitly Shared Classes
11.6. Exercise: Generics
11.7. Review Questions
12. Meta Objects, Properties, and Reflective Programming
12.1. QMetaObject - The Meta Object Pattern
12.2. Type Identification and qobject_cast
12.3. Q_PROPERTY Macro - Describing QObject Properties
12.4. QVariant Class: Accessing Properties
12.5. Dynamic Properties
12.6. MetaTypes, Declaring and Registering
12.7. invokeMethod()
12.8. Exercises: Reflection
12.9. Review Questions
13. Models and Views
13.1. Model-View-Controller (MVC)
13.2. Qt Models and Views
13.2.1. QFileSystemModel
13.2.2. Multiple Views
13.2.3. Delegate Classes
13.3. Table Models
13.3.1. Standard or Abstract?
13.3.2. Editable Models
13.3.3. Sorting and Filtering
13.4. Tree Models
13.4.1. Trolltech Model Testing Tool
13.5. Smarter Pointers
13.6. Exercises: Models and Views
13.7. Review Questions
14. Validation and Regular Expressions
14.1. Input Masks
14.1.1. Exercises: Input Masks
14.2. Validators
14.2.1. Exercises: Validators
14.3. Regular Expressions
14.3.1. Regular Expression Syntax
14.3.2. Regular Expressions: Phone Number Recognition
14.3.3. Exercises: Regular Expressions
14.4. Regular Expression Validation
14.5. Subclassing QValidator
14.6. Exercises: Validation and Regular Expressions
14.7. Review Questions
15. Parsing XML
15.1. The Qt XML Parsers
15.2. SAX Parsing
15.3. XML, Tree Structures, and DOM
15.3.1. DOM Tree Walking
15.3.2. Generation of XML with DOM
15.4. XML Streams
15.5. Review Questions
16. More Design Patterns
16.1. Creational Patterns
16.1.1. Abstract Factory
16.1.2. Abstract Factories and Libraries
16.1.3. qApp and Singleton Pattern
16.1.4. Benefits of Using Factories
16.1.5. Exercises: Creational Patterns
16.2. Memento Pattern
16.2.1. Exporting to XML
16.2.2. Importing Objects with an Abstract Factory
16.3. The Façade Pattern
16.4. Review Questions
16.4.1. Points of Departure
17. Concurrency
17.1. QProcess and Process Control
17.1.1. Processes and Environment
17.1.2. Qonsole: Writing an Xterm in Qt
17.1.3. Qonsole with Keyboard Events
17.1.4. Exercises: QProcess and Process Control
17.2. QThread and QtConcurrent
17.2.1. Thread Safety and QObjects
17.2.2. Parallel Prime Number Calculators
17.2.3. Concurrent Map/Reduce Example
17.3. Exercises: QThread and QtConcurrent
17.4. Review Questions
18. Database Programming
18.1. QSqlDatabase: Connecting to SQL from Qt
18.2. Queries and Result Sets
18.3. Database Models
18.4. Review Questions
II. C++ Language Reference
19. Types and Expressions
19.1. Operators
19.1.1. Table of Operators
19.2. Statements and Control Structures
19.2.1. Statements
19.2.2. Selection Statements
19.2.2.1. Exercises: Selection Statements
19.2.3. Iteration
19.2.3.1. Exercises: Iteration
19.2.4. Review Questions
19.3. Evaluation of Logical Expressions
19.4. Enumerations
19.5. Signed and Unsigned Integral Types
19.5.1. Exercises: Signed and Unsigned Integral Types
19.6. Standard Expression Conversions
19.6.1. Exercises: Standard Expression Conversions
19.7. Explicit Conversions
19.8. Safer ANSI C++ Typecast operators
19.8.1. static_cast and const_cast
19.8.1.1. Exercises: static_cast and const_cast
19.8.2. reinterpret_cast
19.8.3. Why Not Use C-Style Casts?
19.8.4. More About explicit Conversion Constructors
19.9. Overloading Special Operators
19.9.1. Conversion Operators
19.9.2. The Subscript operator[]
19.9.3. The Function Call operator()
19.9.3.1. Exercises: The Function Call operator()
19.10. Runtime Type Identification (RTTI)
19.10.1. typeid operator
19.11. Member Selection Operators
19.12. Exercises: Types and Expressions
19.13. Review Questions
20. Scope and Storage Class
20.1. Declarations and Definitions
20.2. Identifier Scope
20.2.1. Default Scope of Identifiers - More Detail
20.2.2. File Scope Versus Block Scope and operator::
20.2.2.1. Exercises: File Scope Versus Block Scope and operator::
20.3. Storage Class
20.3.1. Globals, static, and QObject
20.3.1.1. Globals and const
20.3.2. Exercises: Storage Class
20.4. Namespaces
20.4.1. Anonymous Namespaces
20.4.2. Open Namespaces
20.4.3. namespace, static objects and extern
20.5. Review Questions
21. Memory Access
21.1. Pointer Pathology
21.2. Further Pointer Pathology with Heap Memory
21.3. Memory Access Summary
21.4. Introduction to Arrays
21.5. Pointer Arithmetic
21.6. Arrays, Functions, and Return Values
21.7. Different Kinds of Arrays
21.8. Valid Pointer Operations
21.9. Arrays and Memory: Important Points
21.10. Exercises: Memory Access
21.11. Review Questions
22. Inheritance in Detail
22.1. virtual Pointers, virtual Tables
22.2. Polymorphism and virtual Destructors
22.3. Multiple Inheritance
22.3.1. Multiple Inheritance Syntax
22.3.2. Multiple Inheritance with QObject
22.3.3. Resolving Multiple Inheritance Conflicts
22.3.3.1. virtual Inheritance
22.3.3.2. virtual Base Classes
22.4. public, protected, and private derivation
22.5. Review Questions
III. Programming Assignments
23. MP3 Jukebox Assignments
23.1. Phonon/MultiMediaKit Setup
23.2. Playlist
23.3. Playlists
23.4. Source Selector
23.5. Database Playlists
23.6. Star Delegates
23.7. Sorting, Filtering, Editing Playlists
A. C++ Reserved Keywords
B. Standard Headers
C. Development Tools
C.1. make and Makefile
C.2. The Preprocessor: For #including Files
C.3. Understanding the Linker
C.3.1. Common Linker Error Messages
C.4. Debugging
C.4.1. Building a Debuggable Target
C.4.1.1. Exercises: Building a Debuggable Target
C.4.2. gdb Quickstart
C.4.3. Finding Memory Errors
C.5. Open Source Development Tools, Libraries, IDEs
D. Alan's Quick Start Guide to Debian for Programmers
D.1. The apt System
D.2. update-alternatives
E. C++/Qt Setup
E.1. C++/Qt Setup: Open Source Platforms
E.2. C++/Qt Setup: Win32
E.3. C++/Qt Setup: Mac OSX
Bibliography
F. Solutions
Index

List of Figures

1.1. (q)make build steps
1.2. QInputDialog – Getting an int
1.3. QMessageBox Question
1.4. Pointer Demo
1.5. Memory Snapshots
2.1. Person Class
2.2. Composition
2.3. UML Class Definition with static
2.4. Bidirectional Relationship
2.5. Fraction Class Diagram
2.6. The Company Chart
2.7. Hondurota
2.8. Date UML Class Diagram
3.1. Qt Creator Welcome Screen
3.2. Qt Creator Projects Mode
4.1. One-to-Many Relationship
4.2. The Employer's View of the Company
4.3. Books and Pages
4.4. Contacts
5.1. Before First swap()
5.2. Inside first swap()
5.3. Inside Second swap()
5.4. Crypto Class
5.5. User Manager UML
6.1. UML Diagram of Inheritance
6.2. Animal Taxonomy
6.3. Shapes UML Diagram
6.4. Another Way to Represent Shapes
6.5. QGraphicsItem Inheritance
6.6. Aggregates and Compositions
6.7. Card Game UML
6.8. Reference Library UML Diagram
6.9. Film classes
6.10. Library - Version 2
6.11. Library - Version 3
7.1. Dependency
7.2. Libraries and their Dependencies
7.3. AntiPattern Example
8.1. Parent-Child Object Versus Base-Derived Class
8.2. Composite Pattern
8.3. QObject: Composite and Component
8.4. Suffolk University Organizational Chart
8.5. QInputDialog
9.1. QWidget's Heritage
9.2. Buttons
9.3. Input Widgets
9.4. Four Views of One Model
9.5. QtCreator in Design Mode
9.6. Designer Signals & Slots Editor
9.7. Configure Connection
9.8. Widget Preview
9.9. Standard Dialogs
9.10. QFormLayout Example
9.11. QtCreator Resource Editor
9.12. Rows and Columns
9.13. Improved Layout with Stretch and Spacing
9.14. Stretchy Buttons
9.15. Sample 15 Puzzle
9.16. Model-View-Controller Design for Puzzle
9.17. Product Form
9.18. Product and Its Form
9.19. Designer to Code
9.20. QtCreator Designer Code Generation Options
9.21. QtCreator: Go to Slot
9.22. Order Form Dialog
9.23. KeySequenceLabel Widget
9.24. QObjectBrowser Widget
9.25. Speed-reader UML
9.26. Speed Reader Screenshot
9.27. Conway's Game of Life
10.1. A Main Window
10.2. QMenu
10.3. Checkable Actions in Menus and Toolbars
10.4. Blackjack Screenshot
10.5. BlackJack UML Diagram
10.6. QMainWindow Regions
10.7. Designer Floating QDockWindows
10.8. System Clipboard Demo
10.9. The Undisturbed Original Photo
10.10. The Undo-Demo Screen
10.11. Text File Browser
11.1. Template-Based Stack
11.2. ContactList UML
11.3. TextbookMap
11.4. Example QSharedData Private Implementation
12.1. MetaObjects
13.1. Widgets and Views
13.2. Model-View-Controller Classes
13.3. Qt View Classes
13.4. Qt Model Classes
13.5. QFileSystemModel in a QTreeView
13.6. Multiple Views, One Model
13.7. Model, View, and Delegate
13.8. Star Delegates
13.9. Shortcut Editor
13.10. Filtered Table View
13.11. Sort Filter Proxy
13.12. ObjectBrowser Tree
13.13. ModelTest in the Debugger
13.14. ColumnView File Browser
13.15. Friends Lists
14.1. Input Masks
14.2. Work Study Calculator
14.3. Regular Expression Tester
14.4. Phone Number Validator
14.5. Palindrome Checker
14.6. Address Form
15.1. Abstract and Concrete SAX Classes
15.2. Plugin Component Architecture
15.3. QDom UML Model
15.4. Domwalker and Slacker
15.5. XML Tree Views
15.6. DocbookDoc
15.7. TreeBuilder Example
16.1. Libraries and factories
16.2. CustomerList UML
16.3. QObjectReader and Its Related Classes
16.4. MetaDataLoader and MetaDataValue
17.1. LogTail in use
17.2. Windows Environment Variables
17.3. KDE/Linux process hierarchy
17.4. Qonsole1
17.5. Qonsole UML: Model and View
17.6. Speedup Factor of PrimeThreads
17.7. Multithreaded Life UML
17.8. Collage example
18.1. Sql Browser Connection Settings Dialog
18.2. Sql Table Models
19.1. Hierarchy of Basic Types
21.1. Initial Values of Memory
21.2. Memory After Leak
22.1. QWidget's inheritance
22.2. Window and ScreenRegion
22.3. QGraphicsObject and Multiple Inheritance
22.4. Person - Student - Teacher
22.5. GradTeachingFellow - Nonvirtual
22.6. GradTeachingFellow - virtual
23.1. Example Screenshot
23.2. Single Playlist
23.3. Source Selector View
23.4. Source Selector and related classes
C.1. The Linker's inputs and outputs
C.2. Umbrello Screenshot

List of Tables

1.1. Examples of Literals
1.2. Simple Types Hierarchy
7.1. Reusable Components
14.1. Mask Characters
14.2. Mask Meta Characters
14.3. Examples of Regular Expressions
19.1. Operator Aliases
19.2. C++ Operators
19.3. ANSI Typecasts
B.1. Standard Headers

List of Examples

1.1. src/early-examples/example0/fac.cpp
1.2. src/iostream/io.cpp
1.3. src/early-examples/fac2.cpp
1.4. src/functions/overload-not.cpp
1.5. src/functions/overload.cpp
1.6. src/common.pri
1.7. src/generic/stlstringdemo.cpp
1.8. src/qstring/qstringdemo.cpp
1.9. src/stdstreams/streamdemo.cpp
1.10. src/qtstreams/qtstreamdemo.cpp
1.11. src/stl/streams/streams.cpp
1.12. src/stl/streams/streams.cpp
1.13. src/stl/streams/streams.cpp
1.14. src/qtstreams/files/qdemo.cpp
1.15. src/early-examples/example1/fac1.cpp
1.16. src/early-examples/example1/example1.pro
1.17. src/early-examples/literals/qliterals.cpp
1.18. src/early-examples/literals-x1.cpp
1.19. src/early-examples/literals-x2.cpp
1.20. src/early-examples/size/qsize.cpp
1.21. src/clargs/clargs-iostream/clargs.cpp
1.22. src/clargs/qt/clargs.cpp
1.23. src/arithmetic/arithmetic.cpp
1.24. src/arithmetic/arithmetic.cpp
1.25. src/arithmetic/arithmetic.cpp
1.26. src/arithmetic/arithmetic.cpp
1.27. src/arithmetic/arithmetic.cpp
1.28. src/arithmetic/arithmetic.cpp
1.29. solution/simpleTypesGame/game.cpp
1.30. src/pointers/pointerdemo/pointerdemo.cpp
1.31. src/pointers/newdelete/ndsyntax.cpp
1.32. src/pointers/newdelete1/newdelete1.cpp
1.33. src/constptr/constptr.cpp
1.34. src/types/types.cpp
1.35. src/types/types-soln.cpp
2.1. src/structdemo/demostruct.h
2.2. src/structdemo/demostruct.cpp
2.3. src/classes/fraction/fraction.h
2.4. src/classes/fraction/fraction.cpp
2.5. src/classes/fraction/fraction.h
2.6. src/classes/fraction/fraction-client.cpp
2.7. src/ctor/complex.h
2.8. src/ctor/complex.cpp
2.9. src/statics/static.h
2.10. src/statics/static.cpp
2.11. src/statics/static-test.cpp
2.12. src/circular/badegg/egg.h
2.13. src/circular/badegg/chicken.h
2.14. src/circular/goodegg/egg.h
2.15. src/circular/goodegg/egg.cpp
2.16. src/lifecycle/copyassign/fraction.h
2.17. src/lifecycle/copyassign/fraction.cpp
2.18. src/lifecycle/copyassign/copyassign.cpp
2.19. src/ctor/conversion/fraction.cpp
2.20. src/ctor/conversion/fraction.h
2.21. src/const/constmembers/constmembers.cpp
2.22. src/subobject/subobject.h
2.23. src/subobject/subobject.cpp
2.24. src/early-examples/thing/thing.h
2.25. src/early-examples/thing/thing.cpp
2.26. src/early-examples/thing/thing-demo.cpp
2.27. src/statics/static3.h
2.28. src/statics/static3.cpp
2.29. src/destructor/demo/thing.h
2.30. src/destructor/demo/destructor-demo.cpp
2.31. src/quizzes/constquiz.cpp
2.32. src/quizzes/constquiz-questions.txt
2.33. src/quizzes/statics-quiz.cpp
2.34. src/quizzes/statics-quiz.txt
3.1. src/qstd/qstd.h
3.2. src/qstd/qstd.cpp
3.3. src/qtio/qtio-demo.cpp
3.4. src/qtio/qtio.pro
4.1. src/containers/lists/lists-examples.cpp
4.2. src/iteration/whyiterator/recurseadddir.cpp
4.3. src/iteration/diriterator/diriterator.cpp
4.4. src/containers/contact/testdriver.cpp
5.1. src/functions/function-call.cpp
5.2. src/functions/function-call.cpp
5.3. src/functions/date.h
5.4. src/functions/date.cpp
5.5. src/functions/date-test.cpp
5.6. src/complex/complex.h
5.7. src/complex/complex.cpp
5.8. src/complex/complex.cpp
5.9. src/complex/complex-test.cpp
5.10. src/complex/complex-conversions.cpp
5.11. src/functions/summit.cpp
5.12. src/functions/pointerparam.cpp
5.13. src/reference/swap.cpp
5.14. src/const/reference/constref.cpp
5.15. src/reference/maxi.cpp
5.16. src/const/overload/constoverload.h
5.17. src/const/overload/constoverload.cpp
5.18. src/const/overload/constoverload-client.cpp
5.19. src/functions/inlinetst.cpp
5.20. src/ellipsis/ellipsis.cpp
5.21. solution/encryption/crypto/randfunc.cpp
5.22. solution/encryption/crypto/randfunc.cpp
5.23. solution/encryption/crypto/randfunc.cpp
5.24. solution/encryption/crypto/randfunc.cpp
5.25. solution/encryption/crypto/randfunc.cpp
5.26. solution/encryption/crypto/randfunc.cpp
5.27. solution/encryption/crypto/randfunc.cpp
5.28. src/functions/crypto-client.cpp
5.29. solution/encryption/cryptoclass/crypto.cpp
5.30. solution/encryption/usermanager/usermanager.h
5.31. solution/encryption/usermanager/usermanager.cpp
5.32. solution/encryption/usermanager/usermanager-test.cpp
6.1. src/derivation/qmono/student.h
6.2. src/derivation/qmono/student.cpp
6.3. src/derivation/qmono/student.cpp
6.4. src/derivation/qmono/student.cpp
6.5. src/derivation/qmono/student-test.cpp
6.6. src/derivation/qpoly/student.h
6.7. src/derivation/qpoly/student-test.cpp
6.8. src/polymorphic1.cc
6.9. src/polymorphic2.cc
6.10. src/derivation/exercise/Base.h
6.11. src/derivation/exercise/Base.cpp
6.12. src/derivation/exercise/main.cpp
6.13. src/derivation/shape1/shapes.h
6.14. src/derivation/shape1/shapes.h
6.15. src/derivation/shape1/shapes.cpp
6.16. src/derivation/shape1/shape1.cpp
6.17. src/derivation/shape1/shape.txt
6.18. src/derivation/overload/account.h
6.19. src/derivation/overload/account-client.cpp
6.20. src/derivation/assigcopy/account.h
6.21. src/derivation/assigcopy/account.h
6.22. src/derivation/assigcopy/account.cpp
6.23. src/derivation/assigcopy/bank.h
6.24. src/derivation/assigcopy/bank.cpp
6.25. src/derivation/argumentlist/argproc.cpp
6.26. src/derivation/argumentlist/argumentlist.h
6.27. src/derivation/argumentlist/argumentlist.cpp
6.28. src/derivation/argumentlist/main.cpp
6.29. src/cardgame/datastructure/cardgame-client.cpp
6.30. src/pointer-container/library.h
6.31. src/pointer-container/library.h
6.32. src/pointer-container/library.cpp
6.33. src/pointer-container/library.cpp
6.34. src/pointer-container/library.h
6.35. src/pointer-container/library.cpp
6.36. src/pointer-container/library.cpp
6.37. src/pointer-container/libraryClient.cpp
6.38. src/pointer-container/libraryClient.cpp
6.39. src/pointer-container/libraryClient.cpp
6.40. src/pointer-container/libraryClient.cpp
6.41. src/pointer-container/libraryClient.cpp
6.42. src/pointer-container/libraryClient.cpp
6.43. src/pointer-container/libraryClient-v2.cpp
6.44. solution/library-stdio/library-v2/library.h
6.45. solution/library-stdio/library-v2/library.cpp
6.46. solution/library-stdio/library-v3/library.h
6.47. solution/library-stdio/library-v3/library.cpp
6.48. src/quizzes/virtual-quiz.cpp
6.49. src/quizzes/virtual-questions.txt
6.50. src/quizzes/abstract-quiz.cpp
6.51. src/quizzes/virtual-destructors-quiz.cpp
6.52. src/quizzes/virtual-destructors-quiz.txt
7.1. src/xml/domwalker/domwalker.pro
7.2. src/libs/dataobjects/dobjs_export.h
7.3. src/bash/env-script.sh
7.4. src/libs/metadata/metadatavalue.h
7.5. src/libs/metadata/metadatavalue.cpp
7.6. src/libs/metadata/metadatavalue.cpp
7.7. src/serializer/testoperators/tst_testoperators.cpp
8.1. src/findchildren/findchildren.cpp
8.2. src/qobject/person.h
8.3. src/qobject/person.cpp
8.4. src/qobject/bunch.cpp
8.5. src/iteration/java/showtree.cpp
8.6. src/libs/tests/assert/testassertequals.h
8.7. src/libs/tests/assert/testassertequals.cpp
8.8. src/libs/tests/assert/testassertequals.cpp
8.9. src/libs/tests/assert/testassertequals.cpp
8.10. src/libs/tests/assert/testassertequals.cpp
8.11. src/libs/tests/assert/testassert.txt
9.1. src/widgets/dialogs/modal/main.cpp
9.2. src/layouts/form/inputform.h
9.3. src/layouts/form/inputform.cpp
9.4. src/libs/cards2/cards2.pro
9.5. src/libs/cards2/cardpics.cpp
9.6. src/layouts/boxes/cardtable.h
9.7. src/layouts/boxes/cardtable.cpp
9.8. src/layouts/boxes/boxes.cpp
9.9. src/layouts/stretch/cardtable.cpp
9.10. src/designer/productform/ui_ProductForm.h
9.11. src/designer/delegation/productform.h
9.12. src/designer/delegation/productform.cpp
9.13. src/eventloop/keysequencelabel.h
9.14. src/eventloop/keysequencelabel.cpp
9.15. src/eventloop/keysequencelabel.cpp
9.16. src/eventloop/keysequencelabel.cpp
9.17. src/timer/speed-reader/mainwindow.h
9.18. src/timer/speed-reader/mainwindow.cpp
9.19. src/widgets/life/lifewidget.h
9.20. src/widgets/life/lifewidget.cpp
9.21. src/widgets/life/lifewidget.cpp
10.1. src/widgets/mainwindow/mymainwindow.h
10.2. src/widgets/dialogs/messagebox/dialogs.cpp
10.3. src/widgets/menus/study.h
10.4. src/widgets/menus/study.cpp
10.5. src/widgets/menus/study.cpp
10.6. src/widgets/menus/study.cpp
10.7. src/widgets/mainwindow/mainwindow-main.cpp
10.8. src/widgets/mainwindow/mymainwindow.cpp
10.9. src/widgets/mainwindow/mymainwindow.cpp
10.10. src/clipboard/mainwindow.cpp
10.11. src/undo-demo/image-manip.h
10.12. src/undo-demo/image-manip.cpp
10.13. src/undo-demo/undomainwin.h
10.14. src/undo-demo/undomainwin.cpp
10.15. solution/textFileBrowser/main.cpp
10.16. solution/textFileBrowser/mainwindow.cpp
10.17. solution/textFileBrowser/mainwindow.h
10.18. solution/textFileBrowser/mainwindow.ui
10.19. solution/textFileBrowser/textBrowser.pro
11.1. src/templates/template-demo.cpp
11.2. src/templates/template-demo.cpp
11.3. src/containers/stack/stack.h
11.4. src/containers/stack/stack.h
11.5. src/containers/stack/main.cpp
11.6. src/containers/sortlist/sortlist4.cpp
11.7. src/containers/sortlist/sortlist-output.txt
11.8. src/containers/qmap/textbook.h
11.9. src/containers/qmap/qmap-example.cpp
11.10. src/containers/qmap/qmap-example.cpp
11.11. src/containers/qmap/qmap-example-output.txt
11.12. src/functors/pointers/main.cpp
11.13. src/functors/operators/functors.h
11.14. src/functors/operators/imagefunctor.cpp
11.15. src/mystring/shareddata/mystring.h
11.16. src/mystring/shareddata/stringdata.h
11.17. src/mystring/shareddata/sstring.h
11.18. src/mystring/shareddata/sharedmain.cpp
11.19. solution/generics/friendslist/friendslist.h
11.20. solution/generics/friendslist/friendslist.cpp
11.21. solution/generics/friendslist/engine.h
11.22. solution/generics/friendslist/engine.cpp
12.1. src/modelview/playlists/stardelegate.cpp
12.2. src/qtrtti/qtrtti.cpp
12.3. src/properties/customer-props.h
12.4. src/properties/customer-props.cpp
12.5. src/properties/testcustomerprops.cpp
12.6. src/properties/testcustomerprops.cpp
12.7. src/properties/output.txt
12.8. src/properties/dynamic/dynoprops.h
12.9. src/properties/dynamic/dynoprops.cpp
12.10. src/properties/dynamic/dynoprops.cpp
12.11. src/properties/dynamic/dynoprops-client.cpp
12.12. src/properties/dynamic/output.txt
12.13. src/metatype/fraction.h
12.14. src/metatype/metatype.cpp
12.15. src/metatype/metatype.cpp
12.16. src/reflection/invokemethod/autosaver.cpp
12.17. src/reflection/invokemethod/arguments.cpp
13.1. src/modelview/filesystem/main.cpp
13.2. src/modelview/multiview/createModel.cpp
13.3. src/modelview/multiview/multiview.cpp
13.4. src/modelview/multiview/multiview.cpp
13.5. src/modelview/playlists/stardelegate.h
13.6. src/modelview/playlists/stardelegate.cpp
13.7. src/modelview/playlists/stardelegate.cpp
13.8. src/modelview/playlists/stardelegate.cpp
13.9. src/modelview/playlists/stardelegate.cpp
13.10. src/modelview/shortcutmodel-standarditem/actiontableeditor.h
13.11. src/modelview/shortcutmodel-standarditem/actiontableeditor_ui.h
13.12. src/modelview/shortcutmodel-standarditem/actiontableeditor.cpp
13.13. src/modelview/shortcutmodel-standarditem/actiontableeditor.cpp
13.14. src/libs/actioneditor/actiontablemodel.h
13.15. src/libs/actioneditor/actiontablemodel.cpp
13.16. src/libs/actioneditor/actiontablemodel.cpp
13.17. src/libs/actioneditor/actiontablemodel.cpp
13.18. src/libs/actioneditor/actiontableeditor.cpp
13.19. src/libs/actioneditor/actiontableeditor.cpp
13.20. src/libs/actioneditor/actiontableeditor.cpp
13.21. src/modelview/objectbrowser/ObjectBrowserModel.h
13.22. src/modelview/objectbrowser/ObjectBrowserModel.cpp
13.23. src/libs/modeltest/readme.txt
13.24. src/libs/dataobjects/dataobjecttablemodel.h
13.25. src/libs/dataobjects/dataobjecttablemodel.cpp
13.26. solution/modelview/friendslist-gui/friendslistmodel.h
13.27. solution/modelview/friendslist-gui/friendslistmodel.cpp
13.28. solution/modelview/friendslist-gui/friendslists.h
13.29. solution/modelview/friendslist-gui/friendslists.cpp
13.30. solution/modelview/friendslist-gui/contactproxymodel.h
13.31. solution/modelview/friendslist-gui/contactproxymodel.cpp
14.1. src/validate/inputmask/masktestform.h
14.2. src/validate/inputmask/masktestform.cpp
14.3. src/validate/numvalidate/inputform.h
14.4. src/validate/numvalidate/inputform.cpp
14.5. src/regexp/testphone.txt
14.6. src/regexp/testphoneread.cpp
14.7. src/validate/regexval/rinputform.h
14.8. src/validate/regexval/rinputform.cpp
14.9. src/validate/palindrome/palindate.h
14.10. src/validate/palindrome/palindate.cpp
14.11. src/validate/palindrome/palindromeform.h
14.12. src/validate/palindrome/palindromeform.cpp
15.1. src/xml/html/testhtml.html
15.2. src/xml/html/testxhtml.html
15.3. src/xml/sax1/samplefile.xml
15.4. src/xml/sax1/tagreader.cpp
15.5. src/xml/sax1/myhandler.h
15.6. src/xml/sax1/myhandler.cpp
15.7. src/xml/sax1/tagreader-output.txt
15.8. src/xml/domwalker/main.cpp
15.9. src/xml/domwalker/domwalker.cpp
15.10. src/xml/domwalker/slacker.cpp
15.11. src/libs/docbook/docbookdoc.h
15.12. src/xml/dombuilder/zenflesh.cpp
15.13. src/xml/zen.xml
15.14. src/xml/zen2html
15.15. src/libs/docbook/docbookdoc.cpp
15.16. src/libs/docbook/docbookdoc.cpp
15.17. src/xml/streambuilder/xmltreemodel.h
15.18. src/xml/streambuilder/xmltreemodel.cpp
16.1. src/libs/dataobjects/abstractfactory.h
16.2. src/libs/dataobjects/objectfactory.h
16.3. src/libs/dataobjects/objectfactory.cpp
16.4. src/libs/dataobjects/address.h
16.5. src/libs/customer/customerfactory.h
16.6. src/libs/customer/customerfactory.cpp
16.7. src/libs/customer/customerfactory.cpp
16.8. src/ctorpoly/ctorpoly.cpp
16.9. src/ctorpoly/ctorpoly-output.txt
16.10. src/xml/propchildren/customerlist.xml
16.11. src/libs/dataobjects/qobjectwriter.cpp
16.12. src/libs/dataobjects/qobjectreader.h
16.13. src/libs/dataobjects/qobjectreader.cpp
16.14. src/libs/dataobjects/qobjectreader.cpp
16.15. src/libs/metadata/metadatavalue.h
16.16. src/libs/metadata/abstractmetadataloader.h
16.17. src/libs/filetagger/tmetadataloader.h
16.18. src/libs/filetagger/tmetadataloader.cpp
16.19. src/libs/filetagger/tmetadataloader.cpp
17.1. src/logtail/logtail.h
17.2. src/logtail/logtail.cpp
17.3. src/logtail/logtail.cpp
17.4. src/logtail/logtail.cpp
17.5. src/environment/setenv.cpp
17.6. src/qonsole/qonsole1/qonsole.h
17.7. src/qonsole/qonsole1/qonsole.cpp
17.8. src/qonsole/qonsole1/qonsole.cpp
17.9. src/qonsole/qonsole1/qonsole.cpp
17.10. src/qonsole/keyevents/qonsole.h
17.11. src/qonsole/keyevents/qonsole.cpp
17.12. src/qonsole/keyevents/qonsole.cpp
17.13. src/qonsole/keyevents/qonsole.cpp
17.14. solution/pwmgr/HashApp/hash.cpp
17.15. src/threads/PrimeThreads/primeserver.h
17.16. src/threads/PrimeThreads/primeserver.cpp
17.17. src/threads/PrimeThreads/primethread.h
17.18. src/threads/PrimeThreads/primethread.cpp
17.19. src/threads/PrimeThreads/primeserver.cpp
17.20. src/threads/PrimeThreads/primeserver.cpp
17.21. src/threads/PrimeThreads/primeserver.cpp
17.22. src/threads/PrimeThreads/primeserver.h
17.23. src/threads/PrimeThreads/primeserver.cpp
17.24. src/threads/life/lifeslice.h
17.25. src/threads/life/lifemainwindow.cpp
17.26. src/threads/life/lifemainwindow.cpp
17.27. src/threads/life/lifemainwindow.cpp
18.1. src/sql/testprepare/testprepare.cpp
18.2. src/libs/sqlmetadata/metadatatable.cpp
18.3. src/libs/sqlmetadata/metadatatable.cpp
18.4. src/libs/sqlmetadata/metadatatable.cpp
18.5. src/libs/sqlmetadata/metadatatable.cpp
18.6. src/libs/sqlmetadata/metadatatable.cpp
18.7. src/libs/tests/testsqlmetadata/testsqlmetadata.cpp
19.1. src/early-examples/nestedif.cpp
19.2. src/continue/continue-demo.cpp
19.3. src/enums/enumtst.cpp
19.4. src/types/tctest1.cpp
19.5. src/types/tctest2.cpp
19.6. src/types/tctest3.cpp
19.7. src/types/unsigned.cpp
19.8. src/types/mixed/mixed-types.cpp
19.9. src/types/convert2bool.cpp
19.10. src/ansicast/m2k.cpp
19.11. src/casts/constcast1.cpp
19.12. src/casts/constcast2.cpp
19.13. src/operators/fraction/fraction-operators.cpp
19.14. src/operators/vect1/vect1.h
19.15. src/operators/vect1/vect1test.cpp
19.16. src/operators/matrix/matrix.h
19.17. src/operators/matrix/matrix.cpp
19.18. src/operators/matrix/matrix.cpp
19.19. src/operators/matrix/matrix.cpp
19.20. solution/matrix/matrix.h
19.21. solution/matrix/matrix.cpp
19.22. solution/matrix/matrix-test.cpp
19.23. src/rtti/dynamic_cast.cpp
19.24. src/pointers/autoptr/qsharedpointer.h
19.25. src/const/cast/const.cc
19.26. src/const/cast/const2.cc
20.1. src/early-examples/decldef/point.h
20.2. src/early-examples/decldef/point.cpp
20.3. src/goto/goto.cpp
20.4. src/switch/switchdemo.cpp
20.5. src/namespace/openspace/opendemo.txt
20.6. Global Versus File Scope
20.7. src/early-examples/scopex.cpp
20.8. src/const/globals/chunk1.cpp
20.9. src/const/globals/chunk2.cpp
20.10. src/storage/storage.cpp
20.11. src/storage/storage-solution.cpp
20.12. src/namespace/a.h
20.13. src/namespace/b.h
20.14. src/namespace/namespace1.cc
20.15. src/namespace/namespace2.cc
20.16. src/namespace/anonymouse.h
20.17. src/qstd/qstd.h
20.18. src/qstd/qstd.cpp
21.1. src/pointers/pathology/pathologydecls1.cpp
21.2. src/pointers/pathology/pathologydecls2.cpp
21.3. src/pointers/pathology/pathologydemo1.cpp
21.4. src/pointers/pathology/pathologydemo2.cpp
21.5. src/arrays/pointerArith.cpp
21.6. src/arrays/returningpointers.cpp
21.7. src/arrays/pointerIndex.cpp
21.8. src/arrays/arrayVSptr.cpp
22.1. src/derivation/typeid/vtable.h
22.2. src/derivation/typeid/vtable.cpp
22.3. src/derivation/assigcopy/bank.h
22.4. src/derivation/assigcopy/account.h
22.5. src/derivation/assigcopy/bank.cpp
22.6. src/derivation/assigcopy/bank.cpp
22.7. src/multinheritance/window.h
22.8. src/multinheritance/window.cpp
22.9. src/multinheritance/people.h
22.10. src/privatederiv/stack.h
22.11. src/privatederiv/stack-test.cpp
C.1. src/qapp/Makefile-abbreviated
C.2. src/preprocessor/constraintmap.h
C.3. src/preprocessor/constraintmap.cpp
C.4. linker-invocation.txt
C.5. src/debugging/wrongdelete.cpp
C.6. src/debugging/valgrind-test.cpp
C.7. src/debugging/valgrind-test2.cpp
C.8. src/debugging/valgrind-test3.cpp
E.1. ../bin/qtconfigure
E.2. ../bin/qt.sh
F.1. src/early-examples/literals-x1.cpp
F.2. src/early-examples/literals-x2.cpp
F.3. solution/simpleTypesGame/game.cpp
F.4. src/types/types-soln.cpp
F.5. solution/encryption/crypto/randfunc.cpp
F.6. solution/encryption/crypto/randfunc.cpp
F.7. solution/encryption/crypto/randfunc.cpp
F.8. solution/encryption/crypto/randfunc.cpp
F.9. solution/encryption/crypto/randfunc.cpp
F.10. solution/encryption/crypto/randfunc.cpp
F.11. solution/encryption/crypto/randfunc.cpp
F.12. solution/encryption/cryptoclass/crypto.cpp
F.13. solution/encryption/usermanager/usermanager.h
F.14. solution/encryption/usermanager/usermanager.cpp
F.15. solution/encryption/usermanager/usermanager-test.cpp
F.16. solution/library-stdio/library-v2/library.h
F.17. solution/library-stdio/library-v2/library.cpp
F.18. solution/library-stdio/library-v3/library.h
F.19. solution/library-stdio/library-v3/library.cpp
F.20. src/iteration/java/showtree.cpp
F.21. solution/textFileBrowser/main.cpp
F.22. solution/textFileBrowser/mainwindow.cpp
F.23. solution/textFileBrowser/mainwindow.h
F.24. solution/textFileBrowser/mainwindow.ui
F.25. solution/textFileBrowser/textBrowser.pro
F.26. solution/generics/friendslist/friendslist.h
F.27. solution/generics/friendslist/friendslist.cpp
F.28. solution/generics/friendslist/engine.h
F.29. solution/generics/friendslist/engine.cpp
F.30. solution/modelview/friendslist-gui/friendslistmodel.h
F.31. solution/modelview/friendslist-gui/friendslistmodel.cpp
F.32. solution/modelview/friendslist-gui/friendslists.h
F.33. solution/modelview/friendslist-gui/friendslists.cpp
F.34. solution/modelview/friendslist-gui/contactproxymodel.h
F.35. solution/modelview/friendslist-gui/contactproxymodel.cpp
F.36. solution/pwmgr/HashApp/hash.cpp