Qt 3.3 introduces many new features as well as many improvements over
the 3.2.x series. For more details, see the online documentation which
is included in this distribution. The documentation is also available
at http://qt.nokia.com/doc/

The Qt version 3.3 series is binary compatible with the 3.2.x series.
Applications compiled for 3.2 will continue to run with 3.3.

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

Qt library
----------

Qt 3.3 is .NET enabled. This release shows how to use classes
developed with Qt in a .NET environment. It includes an analysis of
the different interoperability infrastructures provided by the .NET
framework. An example demonstrates how to use both a manual approach
with Microsoft's managed extensions to the C++ language, and also
automated solutions based on COM and the ActiveQt framework to reuse
native Qt classes and widgets in .NET projects. To learn more about Qt
and .NET read the "Using Qt objects in Microsoft .NET" walkthrough
found in the ActiveQt framework documentation.

Qt 3.3 now supports IPv6 in addition to IPv4. New functions have been
added for IPv6 support to QSocketDevice, QHostAddress and QDNns.

Qt now includes a new tool class called QLocale. This class converts
between numbers and their string representations in various languages.
QLocale supports the concept of a default locale which allows a locale
to be set globally for the entire application.

Support for new 64bit platforms and compilers has been added for Qt
3.3.  Qt now supports Itanium on both Linux (Intel C++ compiler) and
Windows (MSVC and Intel C++ Compiler). Qt 3.3 now also officially
supports FreeBSD.

Qt 3.3 also supports precompiled headers for Windows, Mac OS X and
X11. To use precompiled headers when compiling your Qt application
simply add PRECOMPILED_HEADER and then specify the header file to 
precompile in your .pro file. To learn more about precompiled headers
see the "Using Precompiled Headers" chapter in the qmake User Guide.

Two new database drivers have been added to the SQL module, InterBase
and SQLite. This makes it possible to write database applications that
do not require a database server. SQLite is provided in the Qt 3.3
distribution and can be enabled with either -qt-sql-sqlite or
-plugin-sql-sqlite. The InterBase plugin also works with Firebird, the
open source version of InterBase.

QWidget has a new function setWindowState() which is used to make a
widget maximized, minimized, etc. This allows individual settings for
the minimized/maximized/fullscreen properties.

Support for semi-transparent top-level widgets on Mac OS X and Windows
2000/XP has also been added.

A new example, qregexptester, has been added that makes it easy to
test QRegExps on sample strings.

Qt 3.3 includes in addition to this, numerous bug fixes and
improvements. Special thanks goes to KDE for their reports and
suggestions.


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

Added support for SNAP graphics drivers from SciTech Software. This
gives access to accelerated drivers for more than 150 graphics
chipsets.


Qt/Mac
------

QAccessible support has been introduced (implemented in terms of Apple's
Universal Access API).

Added support for Xcode project files in qmake.

Added Tablet support for Mac OS X.

Numerous visual improvements.


Qt/X11
------

Added support for Xft2 client side fonts on X servers without the
RENDER extension.

Added a new configure option (-dlopen-opengl) which will remove the
OpenGL and Xmu library dependencies in the Qt library. The functions
used by Qt in those libraries are resolved manually using dlopen()
when this option is used.

Improved support for the Extended Window Manager Hints.


Qt/Windows
----------

Added support for Windows Server 2003 (Win64/Itanium).


Qt Motif Extension
------------------

Clipboard operations now work between Qt and Motif widgets in the same
application. Click-to-focus works with Motif widgets that are children
of a QMotifWidget.


ActiveQt Extension
------------------

Two new functions, QAxFactory::startServer() and
QAxFactory::stopServer(), can be used to start and stop an
out-of-process ActiveQt server at runtime. The new functions
QAxFactory::serverDirPath() and QAxFactory::serverFilePath() return
the location of the COM server binary. Server binaries no longer
need to implement a main() entry point function. A default
implementation is used for out-of-process servers. IClassFactory2
is supported for the development of licensed components, and
QAxFactory supports the creation of non-visual COM objects. Class
specific information can be provided directly in the C++ class
declaration using the Q_CLASSINFO macro to control how objects and
controls are registered and exposed. New helper classes and macros
are avialable to make it even easier to expose object classes (see the
QAxServer documentation for details).

COM objects developed with ActiveQt are now supported in a wider range
of clients, including Microsoft Office applications and .NET. Examples
that demonstrate how to use the Qt objects from the examples in .NET
languages like C# are included. QStringList is supported as a type,
and QRect, QSize and QPoint are now supported datatypes for control
properties and as reference parameters. Saving the controls to a
storage or stream now includes the version number of the QDataStream
used for the serialization (note that this might break existing
storages).

The QAxContainer library is now static even for shared configurations
of Qt. This simplifies deployment and allows using both QAxServer and
QAxContainer in one project, i.e. an OLE automatable application that
uses COM objects itself. The semantics of QAxBase::setControl() have
been extended to allow creating of COM objects on remote machines via
DCOM, to create controls requiring a license key and to connect to
already running objects. The implementation of QAxBase::dynamicCall()
has been improved to support passing of parameter values directly in
the function string. Three new classes, QAxScript, QAxScriptManager
and QAxScriptEngine, can be used to script COM objects from within Qt
applications using Windows Script Host.

SAFEARRAY(BSTR) parameters are supported as QStringList. Calling COM
object methods with out-parameters of type short, char and float is 
now supported (the parameters are of type int& and double& in the Qt 
wrapper), and QVariants used for out-parameters don't have to be 
initialized to the expected type. Calling QByteArray functions in 
out-of-process controls no longer returns an error code. The control's 
client side is set to zero when the container releases the control.


Qt Designer
-----------

Qt Designer, Qt's visual GUI builder, has received some speed
optimizations, along with minor improvements to the menu editor.


Qt Assistant
------------

Qt Assistant now saves the states of the tab bars between runs. This
enables users to start browsing where they ended their previous
assistant session.

Shortcuts for Find Next (F3) and Find Previous (Shift+F3) have been
implemented.


Compilers
---------

Qt 3.3 adds support for two new compilers. The Intel C++ compiler is
supported on Windows, Linux and FreeBSD. GNU gcc is supported on
Windows using MinGW.

Qt 3.3 no longer officially supports the Sun WorkShop 5.0 compiler or the
SGI MIPSpro o32 mode.


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

- QAction
	Added a setDisabled() slot similar to QWidget::setDisabled.
	Added an activate() slot which activates the action and
	executes all connected slots.
	QActions::menuText() escapes ampersand characters ('&') when
	using the value of the text property.

- QButtonGroup
	Added QButtonGroup::selectedId property to allow mapping with
	SQL property sets.

- QCursor
	Added new enum value Qt::BusyCursor.
	X11 only: Added QCursor constructor taking a X11 cursor handle.

- QDom
	The QDom classes are now reentrant.

- QEvent
	Added new event type WindowStateChange, obsoleting ShowNormal,
	ShowMinimized, ShowMaximized and ShowFullScreen.

- QHeader
	The sizeChange() signal is emitted when the section sizes are
	adjusted by double clicking.

- QHostAddress
	Added new constructor for IPv6 and new functions
	isIPv6Address() and toIPv6Address(). Obsoleted the functions
	isIp4Addr() and ip4Addr(), replacing them with isIPv4Address()
	and toIPv4Address().

- QIconView
	Improved keyboard search to behave like QListView.

- QListView
	Improved alignment for text in QListViewItems. Right aligned
	text now has the ellipsis on the left.
	Keyboard search now uses the sort column as the column to
	start searching in.
	Improved branch drawing.

- QLocale [new]
	This new tool class converts between numbers and their string
	representations in various languages.

- QMacStyle
	Allow disabling of size constraints.

- QMovie
	Added JNG support.

- QPixmap
	Support full alpha-maps for paletted (8-bit) images.
	Support 16-bit grayscale PNG images with transparency.

- QPushButton
	A push button with both an iconset and text left-aligns the
	text.

- QSocketDevice
	Added setProtocol() and protocol() for IPv6 support.

- QSound
	Windows: Support loop related APIs.

- QSplashScreen
	Less intrusive stay-on-top policy.

- QSql
	Support for InterBase and SQLite.

- QStatusBar
	Draw messages with the foreground() color of the palette,
	rather than with the text() color.

- QString
	Added support for %lc and %ls to sprintf(). %lc takes a
	Unicode character of type ushort, %ls takes a zero-terminated
	array of Unicode characters of type ushort (i.e. const
	ushort*). Also added support for precision (e.g. "%.5s").
	Changed arg() to support "%L1" for localized conversions.
	Windows only: QString::local8Bit() now returns an empty
	QCString when called on a null QString to unify behavior
	with the other platforms.

- QStyle
	Add a new primitive element: PE_RubberBand.
	Added PM_MenuBarItemSpacing and PM_ToolBarItemSpacing pixel metrics.

- QTextDrag
	decode() now autodetects the encoding of text/html content.

- QTextEdit
	Reduced memory consumption by 20 bytes per line.
	Added a getter for the currently set QSyntaxHighlighter.

- QTextBrowser
	Qt now automatically detects the charset of HTML files set
	with setSource().
	
- QVariant
	Comparison between variants where one of the variants is a
	numeric value will compare on the numeric value. Type casting
	between different variants is more consistent.

- QWidget
	Added setWindowOpacity() and windowOpacity() to support
	transparent top-level widgets on Windows and Mac.
	Added windowState() and setWindowState() to allow individual
	setting of the minimized/maximized/fullscreen properties.

- QWindowsStyle
	Qt supports toggling of the accelerator underlines using the
	Alt-key on Windows 98, 2000 and later. On other platforms this
	change has no effect.
