QObjects Child Managment

QObject s Child Managment

Example 9.1 shows a QObject derived class.

Example 9.1. src/qobject/person.h

[ . . . . ]
class Person : public QObject {

 Person(QObject* parent, QString name);
 virtual ~Person();
[ . . . . ]

The complete implementation is shown in Example 9.2 to show that there is no explicit object deletion done in ~Person().

Example 9.2. src/qobject/person.cpp

#include "person.h"
static QTextStream cout(stdout, QIODevice::WriteOnly);

Person::Person(QObject* parent, QString name)
 : QObject(parent) {
 cout << QString("Constructing Person: %1").arg(name) << endl;

Person::~Person() {
 cout << QString("Destroying Person: %1").arg(objectName()) <<

main(), shown in Example 9.3, creates some objects, adds them to other objects, and then exits. All heap objects were implicitly destroyed.

Example 9.3. src/qobject/main.cpp

#include "person.h"

static QTextStream cout(stdout, QIODevice::WriteOnly);
int main(int , char**) {
 cout << "First we create a bunch of objects." << endl;
 Person bunch(0, "A Stack Object"); <-- 1
 /* other objects are created on the heap */
 Person *mike = new Person(&bunch, "Mike");
 Person *carol = new Person(&bunch, "Carol");
 new Person(mike, "Greg"); <-- 2
 new Person(mike, "Peter");
 new Person(mike, "Bobby");
 new Person(carol, "Marcia");
 new Person(carol, "Jan");
 new Person(carol, "Cindy");
 new Person(0, "Alice"); <-- 3
 cout << "
Display the list using QObject::dumpObjectTree()"
 << endl;
 cout << "
Program finished - destroy all objects." << endl;
 return 0;

(1)not a pointer

(2)We do not need to remember pointers to children, since we can reach them via object navigation.

(3)Alice has no parentmemory leak?

Here is the output of this program:

First we create a bunch of objects.
Constructing Person: A Stack Object
Constructing Person: Mike
Constructing Person: Carol
Constructing Person: Greg
Constructing Person: Peter
Constructing Person: Bobby
Constructing Person: Marcia
Constructing Person: Jan
Constructing Person: Cindy
Constructing Person: Alice

Display the list using QObject::dumpObjectTree()
QObject::A Stack Object
Program finished - destroy all objects.
Destroying Person: A Stack Object
Destroying Person: Mike
Destroying Person: Greg
Destroying Person: Peter
Destroying Person: Bobby
Destroying Person: Carol
Destroying Person: Marcia
Destroying Person: Jan
Destroying Person: Cindy

Notice that Alice is not part of the dumpObjectTree() and does not get destroyed.

Exercise: QObject's Child Managment

Add the function

void showTree(QObject* theparent)

to main.cpp. The output of this function, after all objects have been created, should look like this:

Member: Mike - Parent: A Stack Object
Member: Greg - Parent: Mike
Member: Peter - Parent: Mike
Member: Bobby - Parent: Mike
Member: Carol - Parent: A Stack Object
Member: Marcia - Parent: Carol
Member: Jan - Parent: Carol
Member: Cindy - Parent: Carol

Composite Pattern Parents and Children

Part I: Introduction to C++ and Qt 4

C++ Introduction


Introduction to Qt



Inheritance and Polymorphism

Part II: Higher-Level Programming


Introduction to Design Patterns


Generics and Containers

Qt GUI Widgets


Validation and Regular Expressions

Parsing XML

Meta Objects, Properties, and Reflective Programming

More Design Patterns

Models and Views

Qt SQL Classes

Part III: C++ Language Reference

Types and Expressions

Scope and Storage Class

Statements and Control Structures

Memory Access

Chapter Summary

Inheritance in Detail

Miscellaneous Topics

Part IV: Programming Assignments

MP3 Jukebox Assignments

Part V: Appendices

MP3 Jukebox Assignments


MP3 Jukebox Assignments

An Introduction to Design Patterns in C++ with Qt 4
An Introduction to Design Patterns in C++ with Qt 4
ISBN: 0131879057
EAN: 2147483647
Year: 2004
Pages: 268

Flylib.com © 2008-2020.
If you may any questions please contact us: flylib@qtcs.net