Errata

Programming with Qt

Errata for Programming with Qt

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released.

The following errata were submitted by our customers and have not yet been approved or disproved by the author or editor. They solely represent the opinion of the customer.

Color Key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted by Date submitted
Printed Page 26
Example 2-2

In line 12:
QLabel* mylabel = new QLabel( "Hello world", mywidget);

The word "mywidget" or the entire line should be displayed in bold face, because is
has changed since the previous example.
Readers might take the code from the previous example and not change that line
because it isn't displayed in bold face.
This causes compile or run problems.

The change is noted in the text, though.

Anonymous   
Printed Page 37,457
Exercises on that page (#1)

the solution presented in the back of the book for exercise on page 37 simply doesn't
work, and the program operates with all the same characteristics as before.

This could be caused by:
1. the fact that i'm running in Blackbox on a x86 Debian Linux machine
2. the language has changed so that a slider does send the signal valueChanged as the
slider is moved, and not just on the mouse release.

Anonymous   
Printed Page 39
method mouseMoveEvent

Programm qtscripple1.cpp:

the drawing QPainter object windowpainter has always the color white untill I resize
the window.

After creating a QPaint object and setting the size it works fine.

void ScribbleWindow::mouseMoveEvent(QMouseEvent* event)
{
//create a QPen object for setting the penwidth
QPen pen;
pen.setWidth(1);

//create a QPainter object for drawing onto the window
QPainter windowpainter;
//an another QPainter object for drawing into an off-screen pixmap
QPainter bufferpainter;

//start painting
windowpainter.begin(this); //this painter paints onto the window
bufferpainter.begin(&_buffer); //and this one paints in the buffer

//allocating the pen to both the window and the buffer
windowpainter.setPen(pen);
bufferpainter.setPen(pen);

//draw a line in both the window and the buffer
windowpainter.drawLine(_last, event->pos());
bufferpainter.drawLine(_last, event->pos());

//done with painting
windowpainter.end();
bufferpainter.end();

//remember the current mouse position
_last = event->pos();
}

I don't know if this problem is only on SunOs available.

Anonymous   
Printed Page 44
5th paragraph

Last sentence of paragraph begins:
For example, when the File menu

Should be:
For example, when the Color menu

Explanation: You choose the drawing color from the color-menu and not from the file-
menu!

Anonymous   
Printed Page 55
Exercise 1

The original text is:

redpixmap = new QPixmap(20, 20);
redpixmap.fill(red);

I think it should be changed to:

Qpixmap redpixmap(20, 20);
redpixmap.fill(red);

Anonymous   
Printed Page 86-87
bottom of 86 and all of 87

Three of the lines of code to set the style do not compile:
QApplication::setStyle( new QWindowsStyle );
QWidgetListIt widgetlist_it( *widgetlist );
QObjectListIt objectlist_it( *objectlist );

The command-line switches to set the style have no effect.

Anonymous   
Printed Page 117
Second last paragraph

It says that you "rarely need to instantiate QDockWindow yourself".
It should read "rarely need to instantiate QDockArea yourself".

Anonymous   
Printed Page 145
Code snippit in the 2nd paragraph

QErrorMessage* errorMessage = new QErrorMessage( parent );
parent->message( "Your hard disk is on fire!" );

Should be:

QErrorMessage* errorMessage = new QErrorMessage( parent );
errorMessage->message( "Your hard disk is on fire!" );

Anonymous   
Printed Page 154
2nd paragraph, second sentence. Just below the Figure 5-7

"The Back and Front buttons are automatically configured..."

There is no "Front" button, so it should probably say:

"The Back and Next buttons are automatically configured..."

Anonymous   
Printed Page 175
3rd item, QPtrDict

This describes QDict, not QPtrDict. The heading and two references in the descriptive
paragraph should be changed.

The later QPtrDict paragraph (p.176) also has an error:
"This class is similar to QPtrDict..."
should be
"This class is similar to QDict..."

Anonymous   
Printed Page 234
Table 10-1 in the 2nd Metacharacter Example

The Example for the Metacharacter "{n,}" should be changed from:

a{,3}b

to:

a{3,}b

Anonymous   
Printed Page 235
Table 10-2

'.' doesn't work. '\.' has to be used to escape the dot.
I suppose the same applies to all the sequences in that table
up to '}'.

Anonymous   
Printed Page 236
Table 10-2

The Sequence s is explained twice. The second explanation, being less precise, could
probably be omitted.

Anonymous   
Printed Page 240
line 12, line 22

in the lines which reads:

"virtual bool startElement(const QString& namespace, const QString& localName, ..."

the term "namespace" is actually a keyword in C++ as there is namespaces in C++.

it should be changed to something like "nspace" for the parameter name.

Anonymous   
Printed Page 241
third line of the code on the top of the page

the line:
"reader.parse(source);"

should be:

"reader.parse(inputSource);"

as this has defined from the last line of code on page 240.

Anonymous   
Printed Page 251
8th last sentence of the code

The code example on page 251 (second edition) causes a segmentation fault
when the "delete fileinfolist" statement is reached.
I tried using a similar function to the one in the book in an application
and got this segfault. I then posted the problem to the qt-interest
mailing-list and got this answer from Dimitri at Trolltech.

I also downloaded the example from your site to be sure it is an error,
and I still get an segfault.

[begin]
Re: Segfault when manually deleting QPtrList
From:
Dimitri Papadopoulos <dimitri@trolltech.com>
trolltech.qt-interest
Refs: 1

> I get a segfault when the program attempts to delete fileinfolist (a
> QFileInfoList).
> [...]
> const QFileInfoList* fileinfolist = dir.entryInfoList();
> [...]
> //delete fileinfolist; // segfaults

The documentation of QDir::entryInfoList() states:
The returned pointer is a const pointer to a QFileInfoList.
The list is owned by the QDir object and will be reused on
the next call to entryInfoList() for the same QDir instance.
If you want to keep the entries of the list after a subsequent
call to this function you will need to copy them.

http://doc.trolltech.com/3.0/qdir.html#entryInfoList

You shouldn't delete an object owned by another object.
This causes a double deletion - and a segfault.

Dimitri
[end]

Anonymous   
Printed Page 268
1st paragraph

This paragraph says that by surrounding a declaration with extern { ... } you tell
the compiler to use C linkage. In fact it must be extern "C" { ... } for this to
work.

Anonymous   
Printed Page 271
below #ifdef Q_WS_WIN statement

The 'dirlister.cpp' example will fail on WinXP Pro or WinNT (have not checked other
versions). It appears to me that if a command cannot be run from 'Start > Run'
dialog, it cannot be run from the QProcess.

EXISTING:------------------------------
#ifdef Q_WS_WIN
process->addArgument( "dir" );
#else

CHANGE TO:-----------------------------
#ifdef Q_WS_WIN
process->addArgument( "cmd.exe /C dir" );
#else

END Snippets -------------------------

I have found that my results look better if I comment out the line:
edit->append( "
" );
on page 270.

For more cmd.exe information, type 'cmd /?' at the dos prompt.

(Thanks to replies from Torbjorn Eriksson and Soeren Fietzke at the Trolltech
newsgroup)

Anonymous   
Printed Page 295
Last line of 4th paragraph

"... below the mouse painter."

Should be,

"... below the mouse pointer."

{Chapter 8}
All references to QPtrDict should be changed to QDict

Anonymous   
Printed Page 304
second paragraph following example 16-1

QApplication::installGlobalEventFilter() should be
QApplication::installEventFilter();

According to TrollTech's documentation: "It's also possible to filter all events for
the entire application, by installing an event filter on QApplication."

Anonymous   
Printed Page 363
Table 22-1

the qmake option for multithread is "thread" and not "qhread"

Anonymous   
Printed Page 367
last statement in function HTTPMirrorServer::newConnection()

change from:
stream << "<HTML><BODY><PRE>";

change to:
stream << "HTTP/1.0 200 OK
";
stream << "Content-Type: text/html
";
stream << "
";
stream << "<HTML><BODY><PRE>";

Otherwise my IE 6.0 will not display the mirrored
text correctly.

Anonymous   
Printed Page 386
1st line, 2nd paragraph

"The browser first calls the method RotatePlugin::create(), ..."

should be,

"The browser first calls the method QNPlugin::create(), ..."

Anonymous   
Printed Page 386
1st line, 3rd paragraph

"RotatePlugin::create() is only called once, ..."

Should be,

"QNPlugin::create() is only called once, ..."

Anonymous   
Printed Page 386
end of 3rd paragraph

"... which the browser demands by calling RotatePlugin:: newIn-
stance()."

Should be,

"... which the browser demands by calling RotatePlugin::newIn-
stance()."

i.e., without the space after the scope operator.

Anonymous   
Printed Page 387
1st line of page 387

"The browser uses streamAsFile() to tell ..."

Should be,

"The browser uses newStreamCreated() to tell ..."

Anonymous   
Printed Page 423
In code snippet at top of page

The destructor ~PizzaEntryImpl() is not present in the code snippet.
The function definition is present in the code snippet at the top
of page 424.This omission causes the compiler to issue a warning.

Anonymous   
Printed Page 424
In code snippet at bottom of page

The code statement pizzaEntry.show(); is missing from the code snippet. It should
appear as follows:

#include <qapplication.h>
#include <"PizzaEntryImpl.h>

int main( int argc, char* argv[] )
{
QApplication app( argc, argv );

PizzaEntryImpl pizzaEntry( 0, "pizza entry", true );
app.setMainWidget( &pizzaEntry );
pizzaEntry.show();
int ret = pizzaEntry.exec();
return ret;
}

The omission prevents the window from displaying on screen when
the program is run.

Anonymous   
Printed Page 425
line 11

moc -o moc_PizzaEntryTest.cpp PizzaEntry.cpp

should be...

moc -o moc_PizzaEntryTest.cpp PizzaEntry.h

Anonymous   
Printed Page 425
top of page, second line: moc -o moc_PizzaEntryTest.cpp PizzaEntryTest.cpp

When running this command on a Linux system with the g++ compiler(version 3.0.2), the following error is reported at the prompt:

PizzaEntryTest.cpp:0: Warning: No relevant classes found. No output generated.

All input files were double checked for mistakes( typos, syntax, etc.) and there were none. What is the problem? Why is the file
moc_PizzaEntryTest.cpp not included in the input for the g++ compiler
on line 3 at the top of the page?

This problem appears to be duplicated in the command list for
the Windows with Visual C++ option on the fifth line below the phrase "and for Windows with Visual C++" on the same page.

Anonymous   
Printed Page 490
QSettings class, 248-250

The index entry,

QSettings class, 248-250

should be,

QSettings class, 254-257

Anonymous