Qt 3.0 adds a wide range of major new features as well as substantial
improvements over the Qt 2.x series. Some internals have undergone
major redesign and new classes and methods have been added.

The Qt version 3.x series is not binary compatible with the 2.x
series.  This means programs compiled with Qt version 2.x must be
recompiled to work with Qt 3.0.

In addition to the traditional Qt platforms Linux, Unix and the
various flavours of MS-Windows.  Qt 3.0 for the first time introduces a
native port to MacOS X. Like all Qt versions, Qt/Mac is source
compatible with the other editions and follows closely the platform's
native look and feel guidelines.

We have tried to keep the API of Qt 3.0 as compatible as possible with
the Qt 2.x series. For most applications, only minor changes will be
needed to compile and run them successfully using Qt 3.0.

One of the major new features that has been added in the 3.0 release
is a module allowing you to easily work with databases. The API is
platform independent and database neutral. This module is seamlessly
integrated into Qt Designer, greatly simplifying the process of
building database applications and using data aware widgets.

Other major new features include a plugin architecture to extend Qt's
functionality, for styles, text encodings, image formats and database
drivers. The Unicode support of Qt 2.x has been greatly enhanced, it
now includes full support for scripts written from right to left
(e.g. Arabic and Hebrew) and also provides improved support for Asian
languages.

Many new classes have been added to the Qt Library. Amongst them are
classes that provide a docking architecture (QDockArea/QDockWindow), a
powerful rich text editor (QTextEdit), a class to store and access
application settings (QSettings) and a class to create and communicate
with processes (QProcess).

Apart from the changes in the library itself a lot has been done to
make the development of Qt applications with Qt 3.0 even easier than
before. Two new applications have been added: Qt Linguist is a tool to
help you translate your application into different languages; Qt
Assistant is an easy to use help browser for the Qt documentation that
supports bookmarks and can search by keyword.

Another change concerns the Qt build system, which has been reworked
to make it a lot easier to port Qt to new platforms. You can use this
platform independent build system - called qmake - for your own
applications.

And last but not least we hope you will enjoy the revisited and widely
extended documentation.


Qt/Embedded
----------

Qt/Embedded 3.0 provides the same features as Qt 3.0, but currently
lacks some of the memory optimizations and fine-tuning capabilities of
Qt/Embedded 2.3.x. We will add these in the upcoming maintainance
releases.

If you develop a new product based on Qt/Embedded, we recommend
switching to 3.0 because of the greatly improved functionality.
However, if you are planning a release within the next two months and
require memory optimizations not available with Qt/Embedded 3.0, we
suggest using Qt/Embedded 2.3.x.


The Qt Library
========================================

A large number of new features has been added to Qt 3.0. The following
list gives an overview of the most important new and changed aspects
of the Qt library.


Database support
----------------

One of the major new features in Qt 3.0 is the SQL module that
provides cross-platform access to SQL databases, making database
application programming with Qt seamless and portable. The API, built
with standard SQL, is database-neutral and software development is
independent of the underlying database.

A collection of tightly focused C++ classes are provided to give the
programmer direct access to SQL databases. Developers can send raw SQL
to the database server or have the Qt SQL classes generate SQL queries
automatically.  Drivers for Oracle, PostgreSQL, MySQL and ODBC are
available and writing new drivers is straightforward.

Tying the results of SQL queries to GUI components is fully supported
by Qt's SQL widgets. These classes include a tabular data widget
(for spreadsheet-like data presentation with in-place editing), a
form-based data browser (which provides data navigation and edit
functions) and a form-based data viewer (which provides read-only
forms). This framework can be extended by using custom field editors,
allowing for example, a data table to use custom widgets for in-place
editing. The SQL module fully supports Qt's signals/slots mechanism,
making it easy for developers to include their own data validation and
auditing code.

Qt Designer fully supports Qt's SQL module. All SQL widgets can be
laid out within Qt Designer, and relationships can be established
between controls visually. Many interactions can be defined purely in
terms of Qt's signals/slots mechanism directly in Qt Designer.


Explicit linking and plugins
-------------------------

The QLibrary class provides a platform independent wrapper for runtime
loading of shared libraries.

Specialized classes that make it possible to extend Qt's functionality
with plugins: QStylePlugin for user interface styles, QTextCodecPlugin
for text encodings, QImageFormatPlugin for image formats and
QSqlDriverPlugin for database drivers.

It is possible to remove unused components from the Qt library, and
easy to extend any application with 3rd party styles, database drivers
or text codecs.

Qt Designer supports custom widgets in plugins, and will use the
widgets both when designing and previewing forms (QWidgetPlugin).


Rich text engine and editor
---------------------------

The rich text engine originally introduced in Qt 2.0 has been further
optimized and extended to support editing. It allows editing formatted
text with different fonts, colors, paragraph styles, tables and
images. The editor supports different word wrap modes, command-based
undo/redo, multiple selections, drag and drop, and many other
features.  The engine is highly optimized for proccesing and displaying
large documents quickly and efficiently.


Unicode
-------

Apart from the rich text engine, another new feature of Qt 3.0 that
relates to text handling is the greatly improved Unicode support. Qt
3.0 includes an implementation of the bidirectional algorithm (BiDi)
as defined in the Unicode standard and a shaping engine for Arabic,
which gives full native language support to Arabic and Hebrew speaking
people. At the same time the support for Asian languages has been
greatly enhanced.

The support is almost transparent for the developer using Qt to
develop their applications. This means that developers who developed
applications using Qt 2.x will automatically gain the full support for
these languages when switching to Qt 3.0. Developers can rely on their
application to work for people using writing systems different from
Latin1, without having to worry about the complexities involved with
these scripts, as Qt takes care of this automatically.


Docked and Floating Windows
---------------------------

Qt 3.0 introduces the concept of dock windows and dock areas. Dock
windows are widgets, that can be attached to, and detached from, dock
areas. The most common kind of dock window is a tool bar. Any number of
dock windows may be placed in a dock area. A main window can have dock
areas, for example, QMainWindow provides four dock areas (top, left,
bottom, right) by default. The user can freely move dock windows and
place them at a convenient place in a dock area, or drag them out of
the application and have them float freely as top level windows in
their own right. Dock windows can also be minimized or hidden.

For developers, dock windows behave just like ordinary widgets. QToolbar
for example is now a specialized subclass of a dock window.  The API
of QMainWindow and QToolBar is source compatible with Qt 2.x, so
existing code which uses these classes will continue to work.


Regular Expressions
-------------------

Qt has always provided regular expression support, but that support
was pretty much limited to what was required in common GUI control
elements such as file dialogs. Qt 3.0 introduces a new regular
expression engine that supports most of Perl's regex features and is
Unicode based. The most useful additions are support for parentheses
(capturing and non-capturing) and backreferences.


Storing application settings
----------------------------

Most programs will need to store some settings between runs, for
example, user selected fonts, colors and other preferences, or a list
of recently used files.  The new QSettings class provides a platform
independent way to achieve this goal. The API makes it easy to store
and retrieve most of the basic data types used in Qt (such as basic
C++ types, strings, lists, colors, etc). The class uses the registry
on the Windows platform and traditional resource files on Unix.


Creating and controlling other processes
----------------------------------------

QProcess is a class that allows you to start other programs from
within a Qt application in a platform independent manner. It gives you
full control over the started program.  For example you can redirect
the input and output of console applications.


Accessibility
---------------

Accessibility means making software usable and accessible to a wide
range of users, including those with disabilities. In Qt 3.0, most
widgets provide accessibility information for assistive tools that can
be used by a wide range of disabled users. Qt standard widgets like
buttons or range controls are fully supported. Support for complex
widgets, like e.g. QListView, is in development. Existing applications
that make use of standard widgets will become accessible just by using
Qt 3.0.

Qt uses the Active Accessibility infrastructure on Windows, and needs
the MSAA SDK, which is part of most platform SDKs. With improving
standardization of accessibility on other platforms, Qt will support
assistive technologies on other systems too.


XML Improvements
----------------

The XML framework introduced in Qt 2.2 has been vastly improved. Qt
2.2 already supported level 1 of the Document Object Model (DOM), a
W3C standard for accessing and modifying XML documents.  Qt 3.0 has
added support for DOM Level 2 and XML namespaces.

The XML parser has been extended to allow incremental parsing of XML
documents. This allows you to start parsing the document directly
after the first parts of the data have arrived, and to continue
whenever new data is available.  This is especially useful if the XML
document is read from a slow source, e.g. over the network, as it
allows the application to start working on the data at a very early
stage.


SVG support
-----------

SVG is a W3C standard for "Scalable Vector Graphics". Qt 3.0's SVG
support means that QPicture can optionally generate and import static
SVG documents. All the SVG features that have an equivalent in
QPainter are supported.


Multihead support
-----------------

Many professional applications, such as DTP and CAD software, are able
to display data on two or more monitors. In Qt 3.0 the QDesktopWidget
class provides the application with runtime information about the
number and geometry of the desktops on the different monitors and such
allows applications to efficiently use a multi-monitor setup.

The virtual desktop of Windows 98 and 2000 is supported, as well as
the traditional multi-screen and the newer Xinerama multihead setups
on X11.


X11 specific enhancements
-------------------------

Qt 3.0 now complies with the NET WM Specification, recently adopted
by KDE 2.0.  This allows easy integration and proper execution with
desktop environments that support the NET WM specification.

The font handling on X11 has undergone major changes.  QFont no longer
has a one-to-one relation with window system fonts.  QFont is now a
logical font that can load multiple window system fonts to simplify
Unicode text display.  This completely removes the burden of
changing/setting fonts for a specific locale/language from the
programmer.  For end-users, any font can be used in any locale.  For
example, a user in Norway will be able to see Korean text without
having to set their locale to Korean.

Qt 3.0 also supports the new render extension recently added to
XFree86. This adds support for anti-aliased text and pixmaps with
alpha channel (semi transparency) on the systems that support the
rendering extension (at the moment XFree 4.0.3 and later).


Printing
--------

Printing support has been enhanced on all platforms. The QPrinter
class now supports setting a virtual resolution for the painting
process. This makes WYSIWYG printing trivial, and also allows you to
take full advantage of the high resolution of a printer when painting
on it.

The postscript driver built into Qt and used on Unix has been greatly
enhanced. It supports the embedding of true/open type and type1 fonts
into the document, and can correctly handle and display Unicode.
Support for fonts built into the printer has been enhanced and Qt now
knows about the most common printer fonts used for Asian languages.


Networking
-----------

A new class QHttp provides a simple interface for HTTP downloads and
uploads.


Compatibility with the Standard Template Library (STL)
------------------------------------------------------

Support for the C++ Standard Template Library has been added to the Qt
Template Library (QTL).  The QTL classes now contain appropriate copy
constructors and typedefs so that they can be freely mixed with other
STL containers and algorithms.  In addition, new member functions have
been added to QTL template classes which correspond to STL-style
naming conventions (e.g., push_back()).


Qt Designer
========================================

Qt Designer was a pure dialog editor in Qt 2.2 but has now been
extended to provide the full functionality of a GUI design tool.

This includes the ability to lay out main windows with menus and
toolbars. Actions can be edited within Qt Designer and then plugged
into toolbars and menu bars via drag and drop. Splitters can now be
used in a way similar to layouts to group widgets horizontally or
vertically.

In Qt 2.2, many of the dialogs created by Qt Designer had to be
subclassed to implement functionality beyond the predefined signal and
slot connections. Whilst the subclassing approach is still fully
supported, Qt Designer now offers an alternative: a plugin for editing
code. The editor offers features such as syntax highlighting,
completion, parentheses matching and incremental search.

The functionality of Qt Designer can now be extended via plugins.
Using Qt Designer's interface or by implementing one of the provided
interfaces in a plugin, a two way communication between plugin and Qt
Designer can be established. This functionality is used to implement
plugins for custom widgets, so that they can be used as real widgets
inside the designer.

Basic support for project management has been added. This allows you
to read and edit *.pro files, add and remove files to/from the project
and do some global operations on the project. You can now open the
project file and have one-click access to all the *.ui forms in the
project.

In addition to generating code via uic, Qt Designer now supports the
dynamic creation of widgets directly from XML user interface
description files (*.ui files) at runtime. This eliminates the need of
recompiling your application when the GUI changes, and could be used
to enable your customers to do their own customizations. Technically,
the feature is provided by a new class, QWidgetFactory in the
UI-library.


Qt Linguist
========================================

Qt Linguist is a GUI utility to support translating the user-visible
text in applications written with Qt. It comes with two command-line
tools: lupdate and lrelease.

Translation of a Qt application is a three-step process:

  1) Run lupdate to extract user-visible text from the C++ source
     code of the Qt application, resulting in a translation source file
     (a *.ts file).
  2) Provide translations for the source texts in the *.ts file using
     Qt Linguist.
  3) Run lrelease to obtain a light-weight message file (a *.qm file)
     from the *.ts file, which provides very fast lookup for released
     applications.

Qt Linguist is a tool suitable for use by translators. Each
user-visible (source) text is characterized by the text itself, a
context (usually the name of the C++ class containing the text), and
an optional comment to help the translator. The C++ class name will
usually be the name of the relevant dialog, and the comment will often
contain instructions that describe how to navigate to the relevant
dialog.

You can create phrase books for Qt Linguist to provide common
translations to help ensure consistency and to speed up the
translation process. Whenever a translator navigates to a new text to
translate, Qt Linguist uses an intelligent algorithm to provide a list
of possible translations: the list is composed of relevant text from
any open phrase books and also from identical or similar text that has
already been translated.

Once a translation is complete it can be marked as "done"; such
translations are included in the *.qm file. Text that has not been
"done" is included in the *.qm file in its original form. Although Qt
Linguist is a GUI application with dock windows and mouse control,
toolbars, etc., it has a full set of keyboard shortcuts to make
translation as fast and efficient as possible.

When the Qt application that you're developing evolves (e.g. from
version 1.0 to version 1.1), the utility lupdate merges the source
texts from the new version with the previous translation source file,
reusing existing translations. In some typical cases, lupdate may
suggest translations. These translations are marked as unfinished, so
you can easily find and check them.


Qt Assistant
========================================

Due to the positive feedback we received about the help system built
into Qt Designer, we decided to offer this part as a separate
application called Qt Assistant. Qt Assistant can be used to browse
the Qt class documentation as well as the manuals for Qt Designer and
Qt Linguist. It offers index searching, a contents overview, bookmarks
history and incremental search. Qt Assistant is used by both Qt
Designer and Qt Linguist for browsing their help documentation.


qmake
========================================

qmake is a cross-platform make utility that makes it possible to build
the Qt library and Qt-based applications on various target platforms
from one single project description. It is the C++ successor of
'tmake' which required Perl.

qmake offers additional functionallity that is difficult to reproduce
in tmake. Qt uses qmake in its build system and we have released it as
free software.



Detailed changes
=============

Qt 3.0 went through 6 beta releases. These are the detailed changes
since Beta 6 only. For other changes, please see the changes notes
of the respective beta releases.


Qt 3.0 final is not binary compatible with Beta6; any programs linked
against Beta6 must be recompiled.

Below you will find a description of general changes in the Qt
Library, Qt Designer and Qt Assistant.  Followed by a detailed list of
changes in the API.

****************************************************************************
*			    General					   *
****************************************************************************

****************************************************************************
*			   Library					   *
****************************************************************************

- QApplication
	make sure we process deferred deletes before leaving the event
	loop. This fixes some ocassions of memory leaks on exit.
	win32: some improvements for modality and dockwindow handling
	x11 only: read non-gui QSettings when running without GUI.
	

- QCheckListItem
	Make the checkboxes respect the AlignCenter flag. Also make
	the boxes look better in case they are not placed in the first
	column.

- QComboBox
	if we have a currentItem and then we set the combobox to be
	editable then set the text in the lineedit to be of the
	current item.

- QCommonStyle
	QToolButton: spacing between a toolbutton's icon and its label.
	QProgressBar: text color fixed.

- QCursor
	added the What's This? cursor to the collection.

- QDataTable
	fixed broken context menus.

- QDate
	fixed addMonth() overflow.

- QDesktopWidget
	win32 only: works now also for cases where the card handles
	multiple monitors and GetSystemMetrics returns a single screen
	only.

- QDomAttr
	fixed a memory leak in setNodeValue()

- QDomNodeMap
	added count() as a Qt-style alias for length()

- QDragObject
	default to the middle of the pixmap as a hot spot, this looks
	nicer.

- QFileDialog (internal dialog)
	make viewMode() return the correct value even after the dialog
	is finished. Fixed getOpenFileName and getSaveFileName for
	non-existant directories. Make sure that when it's in
	directory mode that the filters reflect this, and change the
	label from file name to directory.
	win32 only: Improved modality when using the native file
	dialog.

- QFont
	x11 only: speed up fontloading with even more clever
	caching. Make sure we can match scaled bitmap fonts by
	default. Do not load a backup font for a script that is not
	default. Make sure the pixel size is correct, even for fonts
	that are unavailable. Try even harder to find a fontname that
	is not understood. Some RENDER performance optimizations.

- QFontDialog
	make sure the content is set up correctly when initializing
	the dialog.

- QGLWidget
	IRIX only: fixed reparent/resize bug, QGLContext::setContext()
	is incredibly sensitive on different X servers.

- QHeader
	fixed missing updates on height resp. width changes like the
	occur when changing the application font.

- QIconView
	fixed updates of non-auto-arranged views.

- QImage
	no gamma correction by default.
	x11 only: some alignment issue with the alpha masked fixed.

- QIODevice
	fixed return value of QIODevice::readLine() for sequential
	access.

- QKeyEvent
	win32 only: generate Direction_R/L events for bidirectional
	input.

- QLabel
	handle setPixmap( *pixmap() ) gracefully. Apply the WordBreak
	alignment flag to both plaintext and richtext. Improved alignment of
	richtext labels. Removed some sizepolicy magic, QLabel now
	works fine with Preferred/Preferred in all modes.

- QLineEdit
	fixed a crash when doing undo and a validator is set. Emit
	textChanged() also if the text changed because of undo or redo.

- QListBox
	fixed RMB context-menu offset.

- QListView
	do not start renaming an item is CTRL or SHIFT is
	pressed. Start renaming on mouse release, not mouse press, so
	click + click + move on the same item does not start a rename
	operation.

- QMainWindow
	show dock-menu also when clicking on the menubar.

- QPainter
	win32 only: improved printing performance through printer font
	caching.
	boundingRect(): ignore 0-width in the constrain rectangle.

- QPicture
	added overload for load()  that takes a QIODevice.

- QPrintDialog (internal dialog)
	fixed enabling of the first page and last page labels.

- QPrinter
	win32 only: make setColorMode() work, some unicode fixes. Make
	collate the default.  Enable the collate checkbox without
	losing the page selection if you want to print multiple
	pages. Make the collateCopies property work that it knows
	checks/unchecks the collate checkbox in the printing
	dialog. Make settings also work when the print dialog is not
	shown at all.

- QProcess
	added a new communication mode that duplicates stderr to
	stdout (i.e. the equivalent of the shell's 2>&1).

- QPSPrinter (unix)
	fixed collate.
	
- QRangeControl
	simplified code.

- QRichText
	Propagate WhiteSpaceMode to subitems with
	WhiteSpaceModeNormal. Hide DisplayModeNone
	items without additional newline. Fixed links inside non-left
	aligned tables. Fixed some bidi layout problems. Fixed last
	line layout in right-aligned paragraphs. For plain text,
	always use the palette's text color.

- QScrollView
	safer destruction.

- QSettings
	win32 only: fixed a dead lock situation when writing
	to LOCAL_MACHINE, but reading from CURRENT_USER.

- QSGIStyle
	fixed drawing of checkable menu items.

- QSimpleRichText
	use the specified default font.

- QSlider
	optimized drawing in the new style engine.

- QString
	QString::replace() with a regular expression requires a
	QRegExp object, passing a plain string will cause a compile
	error.

- QStyleSheet
	additional parameter 'whitespacemode' for
	QStyleSheet::convertFromPlainText(). Support for superscript
	('sup') and subscript ( 'sub' ).

- QTabBar
	react properly on runtime font changes, less flicker.

- QTable
	take the pixmap of a header section into account when
	adjusting the size.

- QTabWidget
	use the embedded tabbar as focus proxy.

- QThread
	win32 only: possible crash with the thread dictionary fixed.

- QValidator
	In Q{Int,Double}Validator, consider '-' as Invalid rather than
	Intermediate if bottom() >= 0.
	
- QWidget
	made showFullScreen() multihead aware.
	win32 only: Better size and position restoring when switching
	between fullscreen, maximized and minimized.
	x11 only: improvements to XIM, overthespot works correctly
	now.

- QWorkspace
	smarter placement of the minimize button when there is no
	maximize button. Make titlebars of tool windows a bit smaller.
	Improved styleability. Do not maximize a widget that has a
	maximum size that is smaller than the workspace.



****************************************************************************
*			      Other					   *
****************************************************************************

- moc
	fixed generation of uncompilable code in conjunction with
	Q_ENUMS and signal/slots.

- unicode
	allow keyboard switching of paragraph directionality.

- installation
	install $QTDIR/doc/html/ instead of $QTDIR/doc/
	install Qt Designer templates as well.

- improved build on
	HP-UX with cc.
	Solaris 8 with gcc 3.0.1.
	AIX with xlC and aCC.

- inputmethods
	x11 only: do not reset the input context on focus changes.

- uic
	smaller improvements, handle additional form signals.

- Qt Designer
	make it possible to add new signals to a form without
	subclassing. Minor fixes.

- Qt Assistant
	fixed Shift-LMB selection bug. Fixed new window and window
	restoration on restart.

- Qt Linguist
	change fourth parameter of QApplication::translate() from bool
	to enum type. This affects MOC (new revision) and lupdate (new
	syntax to parse). Change Qt Linguist's XML file format (.ts)
	to be consistent with QApplication:<defaultcodec> (rather than
	<codec>) to match QApp::defaultCodec(); encoding="UTF-8"
	(rather than utf8="true") to match QApp::translate(). Fixed
	window decoration on restart. Use 'finished', 'unfinished' and
	'unresolved' instead of the (!), (?) symbols on printouts.

- QMsDev
	merge "Add UIC" and "New Dialog". Better user interface and
	general cleanup. Wwrite (and merge) qmake pro file with active
	project. Load qmake pro files into Visual Studio.


