Qt 4.1 introduces many new features as well as many improvements and
bugfixes over the 4.0.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 4.1 series is binary compatible with the 4.0.x series.
Applications compiled for 4.0 will continue to run with 4.1.

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

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

- Introduced widget backing store support, allowing semi-transparent
  (alpha-blended) child widgets and faster widget painting, as well
  as solving long-lasting issues with non-rectangular widgets.

- Integrated support for rendering Scalable Vector Graphics (SVG)
  drawings and animations (QtSvg module).

- A Portable Document Format (PDF) backend for Qt's printing system.

- A unit testing framework for Qt applications and libraries.

- Modules for extending Qt Designer and dynamic user interface
  building.

- Additional features for developers using OpenGL, such as support
  for pixel and sample buffers.

- A flexible syntax highlighting class based on the Scribe rich text
  framework.

- Support for network proxy servers using the SOCKS5 protocol.

- Support for OLE verbs and MIME data handling in ActiveQt.

- Support for universal binaries on Mac OS X.

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

- Added support for editing menu bars and tool bars.

- Added support for adding comments to string properties.

- Added new static QtUiTools library with improved
  QUiLoader API for loading designer forms at run-time.

- Added support for namespaces in uic generated code.

- Added support for dock widgets in main windows.

- Added support for editing table, tree and list widgets.

- Improved palette editing and resource support.

QTestLib
--------

- Added QTestLib, the Qt Unit Testing Library. See the "QTestLib"
  chapter in the Qt documentation for more information.

- Users of older versions of QtTestLib can use the updater utility in
  tools/qtestlib/updater to convert existing autotests to work with
  QTestLib.

Boost
-----

Added boost compatible syntax for declaring signals and slots. If you
define the macro QT_NO_KEYWORDS, "Q_SIGNALS" and "Q_SLOTS" are
recognized as keywords instead of the default "signals" and "slots".
Added a new keyword to qmake to enable this macro: CONFIG += no_keywords.

ActiveQt
--------

QAxServer now supports mime-type handling - a ActiveX control can be
registered to handle a certain file extension and mime-type, in which
case QAxBindable::load and QAxBindable::save can be reimplemented to
serialize the object.

Build system
------------

Added support for linking static plugins into the application.

Qt 3 to 4 Porting Tool
----------------------

Q(V|H)BoxLayout and QGridLayout usage is now ported to use
Q3(V|H)BoxLayout/Q3GridLayout, to retain the margin/spacing behavior
as in Qt 3.

Meta Object Compiler (moc)
--------------------------

- Added support for const signals.

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

- Added -docPath command line option for easy setting of the
  document root path.

QMake
-----

- Added support for new FORMS3 profile variable to make it possible
  to have Qt Designer forms from Qt 3 and Qt 4 in the same project.

- Added support for precompiled headers on win32-g++ (MinGW)

Compilers
---------

Added support for Solaris 10 on AMD64 with the compiler provided by
Sun.


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


New classes
-----------

- QTreeWidgetItemIterator
        Added iterator to help iterating over items in a QTreeWidget.

- QStringFilterModel
        Allows you to provide a subset of a model to a view based on a
        regular expression.

- QSyntaxHighlighter
        The QSyntaxHighlighter class allows you to define syntax
        highlighting rules.

- QAbstractFileEngine
        A base class for implementing your own file and directory
        handling back-end for QFile, QFileInfo and QDir.

- QAbstractFileEngineHandler
        For registering a QAbstractFileEngine subclass with Qt.

- QFSFileEngine
        The default file engine for regular file and directory access
        in Qt.

- Q3(H|V)BoxLayout and Q3GridLayout
        Layout classes provided for compatibility that behave the same
        as the Qt 4 classes but use a zero margin/spacing by default,
        just like in Qt 3.

- Added qFromLittleEndian, qToLittleEndian, qFromBigEndian and
  qToBigEndian endian helper conversion functions (qendian.h)

- Q_EXPORT_PLUGIN2 macro
        Obsoletes Q_EXPORT_PLUGIN and allows static linking of
        plugins.

- Q3ComboBox
        For enhanced backwards compatibility with Qt 3.

- QGLPbuffer
        For creating and managing OpenGL pixel buffers.

- QNetworkProxy
        For setting up transparent (SOCKS5) networking proxying.

- QDirectPainter (Qtopia Core only)
        Provides direct access to video framebuffer hardware.


General improvements
--------------------

- QByteArray
        Added toLong() and 

- QColorDialog
        Fix shortcut and focus for "Alpha channel" spinbox.

- QLinkedList
        Added conversion methods to convert from/to STL lists.

- QMap/QHash
        Fixed operator>>() to read back multiple values associated
        to a same key correctly.
        Added constFind(), for finding an item without causing a
        detach.

- QMap/QHash
        Const-correctness in const_iterator's operator--(int).

- QMainWindow
        The saveState() and restoreState() functions no longer
        fallback to using the windowTitle property when the objectName
        property is not set on a QToolBar or QDockWidget; this
        behavior was undocumented and has been removed.

- QToolBar
        Added Qt 3 compatibility signal visibilityChanged(bool).

- QMetaType
        Class is now fully reentrant.
        Metatypes can be registered or queried from multiple threads.
        Added qMetaTypeId<T>(), which returns the meta type ID of T at
        compile time.

- QMetaProperty
        Added isResettable().

- QSql
        Oracle plugin adds support for authentication using external
        credentials.
        Added isValid() to QSqlError.

- QThread
        Added setPriority() and priority(), for querying and setting
        the priority of a thread.

- QTreeWidgetItem/QTreeWidget
        Added new constructors and addChildren(), insertChildren(),
        takeChildren(), insertTopLevelItems(), addTopLevelItems to
        speed up insertion of multiple items.

- QTextDocument
        Added the class QTextBlockUserData and added the possibility
        of storing a state or custom user data in a QTextBlock
        Added useDesignMetrics property, to enable the use of design
        metrics for all fonts in a QTextDocument.

- QTextFormat
        Added support for setting the font pixel size.
        Added UserObject to QTextFormat::ObjectTypes enum.

- QMetaType
        The value of QMetaTypeId<T>::Defined indicates whether a given
        type T is supported by QMetaType.

- QAbstractItemView
        Added setIndexWidget() and indexWidget() which makes it
        possible to set a widget at a given index.

        Added a QAbstractItemView::ContiguousSelection mode.
        Added scrollToTop() and scrollToBottom().
        Changed signals pressed(), clicked() and doubleClicked() to
        only emit when the index is valid.

- QAbstractItemModel
        Added a SizeHintRole that can be set for each item. The item
        delegate will now check for this value before computing the
        size hint based on other item data.

        Add QModelIndex::operator<() so we are able to use them in
        QMap and other containers.

        Added qHash function for QModelIndex.

- QTableWidget
        Added cellWidget() and setCellWidget() which makes it possible
        to set a widget at a specified cell.

        Added setCurrentCell().

        Added QTableWidgetItem copy constructors.


- QTreeWidget
        Added setItemWidget() and itemWidget() which makes it possible
        to set a widget on an item.

- QListWidget
        Added setItemWidget() and itemWidget() which makes it possible
        to set a widget on an item.

        Added QListWidgetItem copy constructors.

- QMutableMapIterator
        Added value() overloads to Java-style iterators that return
        non-const references.

- QTextTable
        Added mergeCells() and splitCells() to be able to set the row
        or column span on a table cell.

- QStyle
        Added standardIcon() which returns a default icon for standard
        operations.
        Added State_ReadOnly, which is enabled for read-only widgets.

        Renamed QStyleOption::init() to initFrom().
        - QGroupBox is now completely stylable (QStyleOptionGroupBox).
        - QToolBar is now stylable according to its position in the
          toolbar dock area (QStyleOptionToolBar).
        - Indeterminate (busy) progress bars are now animated properly
          in all styles.
        - By popular request, the default toolbar icon size
          (PM_ToolBarIconSize) in Windows and Plastique styles has
          been changed to 24 x 24 (instead of 16 x 16 in Windows and
          32 x 32 in Plastique).

        Added PM_DockWidgetTitleMargin as pixel metric.

- QHash
        Make it possible to use QHash with a type that has no default
        constructor.

- QTableView
        Made QTableView::setShowGrid() a slot, like in Qt 3.
        Added setRowHeight() and setColumnWidth().

- QTableWidgetSelectionRange
        Added rowCount() and columnCount() convenience functions.

- QSettings
        Added support for custom formats in QSettings.

- QTextStream
        Added status(), setStatus() and resetStatus() for improved
        error handling.
        Added read(qint64 maxlen), for reading parts of a text stream
        into a QString.

- QTextCursor
        Added support for BlockUnderCursor selection type.

- QHeaderView
        Added defaultSectionSize property which tells the default size
        of the header sections before resizing.

- QScrollBar
        Added context menu to the scrollbar with default navigation
        options.

- QScrollArea
        Added ensureVisible(), which can scroll the scrollarea to make
        sure a specific point is visible.

- QDateTime
        Added addMSecs(), which adds a number of milliseconds to the QDateTime.

- QDateTimeEdit
        Added support for more date/time formats.
        Now allows multiple sections of the same type.

- QButtonGroup
        Added handling of buttons with IDs to the buttongroup like in
        Qt 3.

- QIODevice
        Added peek() for peeking data from a device.

- QTextEdit
        Added property tabStopWidth which sets the tab stop width in
        pixels.
        append(const QString &) is now a public slot.
        Added support for inserting Unicode control characters through
        the context menu.
        Added property acceptRichText, for whether or not the text
        edit accepts rich text insertions by the user.
        Added overwriteMode property.

- QDataStream
        Added skipRawData().
        Added support for QRegExp.

- QProgressBar
        Added support for vertical progress bars.

- QImageIOHandler
        The name() function has been obsoleted; use format() instead.
        Added QImageIOHandler::Animation, for determining if the image
        format supports animation.
        Added QImageIOHandler::BackgroundColor, for setting the
        background color for the image loader.

- QImageReader
        Added setBackgroundColor() and backgroundColor(), for setting
        the background color of an image before it is read.
        Added supportsAnimation(), for checking if the image format
        supports animation.

- QImageWriter
        Added support for saving image text.

- QLocale
        Added dateFormat()/timeFormat() to query the date/time format
        for the current locale.
        Added toString() overloads for localized QTime and QDate
        output.
        Added decimalPoint(), groupSeparator(), percent(),
        zeroDigit(), negativeSign() and exponential(), which provide a
        means to generate custom number formatting.

- QHostInfo
        Added support for reverse name lookups.

- QHostAddress
        Added a QString assignment operator
        Added convenience functions for initializing from a native
        sockaddr structure.
        Added support for the IPv6 scope-id.

- QPrinter
        Added property "embedFonts" for embedding fonts into the
        target document.
        Added support for printing to PDF.
        Added support for custom print and paint engines

- QPrintEngine
        Added PPK_SuppressSystemPrintStatus, for suppressing the
        printer progress dialog on Mac OS X.

- QKeySequence
        Added fromString() and toString() for initializing a key
        sequence from, and exporting a key sequence to a QString.

- QUrl
        Added the port(int) function, which provides a default value
        for the port if the URL does not define a port.
        Support for decoding Punycode encoded hostnames in URLs.
        Made the parser more tolerant for mistakes, and added a
        ParsingMode flag for selecting strict or tolerant parsing.
        Added support for the NAMEPREP standard in our i18n domain
        name support.

- QDir
        Added the filter QDir::NoDotAndDotDot, for the
        special directories "." and "..".
        Added the filter QDir::AllEntries, for all entries
        in a directory, including symlinks.


- QAbstractSocket
        Added slots connectToHostImplementation() and
        disconnectFromHostImplementation() to provide polymorphic
        behavior for connectToHost() and disconnectFromHost().

- QMenuBar
        Added setActiveAction(), which makes the provided action
        active.

- QProxyModel
        This class has been obsoleted (see QAbstractProxyModel)

- QWidget
        Now supports three modes of modality: NonModal, WindowModal
        and ApplicationModal.
        Added Qt::WindowModality, obsoleted WA_ShowModal and
        WA_GroupLeader.
        Added Qt::WA_OpaquePaintEvent widget attribute, obsoleting
        Qt::WA_NoBackground.
        Added boolean autoFillBackground property.
        Child widgets now always inherit the contents of their parent.

- QPalette
        Added QPalette::Window (obsoletes Background) and
        QPalette::WindowText (obsoletes Foreground).

- QHttpResponseHeader
        Added two constructors and the function setStatusLine() for
        generating a response header.

- QBitArray
        Added count(bool), for counting on and off-bits in a bit
        array.

- QVariant
        Added support for QRegExp

- QRegExpValidator
        Added the property "regExp".

- QTabBar
        Added the property "iconSize", for setting the size of the
        icons on the tabs.

- QLineEdit
        Added support for inserting Unicode control characters through
        the context menu.

- QString
        Added toLong() and toULong().
        Support for std::string conversions with embedded \0
        characters.

- QRegion
        Added translate(), like QRect::translated().

- QProcess
        Added systemEnvironment(), which returns the environment
        variables of the calling process.
        Added exitStatus(), and added a new finished() signal which
        takes the exit status as a parameter.

- QComboBox
        Made setCurrentIndex() a slot.

- QFontDataBase
        Added styleString(), for retrieving the style string from a
        QFontInfo.
        Added support for Myanmar fonts.

- QFontMetrics
        Added xHeight(), which returns the 'X' height of the font.

- QCoreApplication
        Added arguments(), which returns a list of command line
        arguments as a QStringList.

- QTcpSocket
        Added support for SOCKS5 via setProxy().

- QUdpSocket
        Added property "bindMode", for binding several sockets to the
        same address and port.

- QPen
        Added support for custom dash pattern styles and miter limits.
        Added support for QDebug.

- QDebug
        Added support for QVector and QPair output.

- QStringListModel
        Added support for sorting.

- QOpenGLPaintEngine
        Gradients in the OpenGL paint engine are now drawn using
        fragment programs, if the extension is available. Lots of
        fixes, speedups and tweaks.


Platform-Specific changes
-------------------------

Windows:

- Painting
        Added support for ClearType text rendering.

- File Engine
        Added support for long filenames/paths.

X11:

- QWidget
        Added support for freedesktop.org startup notifications.

Mac OS X:

- Added support for universal binaries
- Improved support for the VoiceOver accessibility tool in Mac OS X 10.4
  and later


3rd-party libraries
-------------------

- zlib
        Upgraded to zlib 1.2.3.

- FreeType
        Upgraded to FreeType 2.1.10.

- SQLite
        Upgraded to SQLite 3.2.7
