|  | Home · All Classes · All Functions · Overviews

# What's New in Qt 4.6

Qt 4.6 provides many improvements and enhancements over the previous releases in the Qt 4 series. This document covers the most important features in this release, separated by category.

A list of other Qt 4 features can be found on the What's New in Qt 4 page.

Highlights

- Support for Symbian
- Animation Framework
- State Machine Framework
- Multi-Touch and Gestures
- DOM access API
- Performance Optimizations
- Graphics Effects
- XML Schema Validation
- Qt3D enablers
- Multimedia Services
- New Classes, Functions, Macros, etc.

## Support for Symbian

Qt 4.6 is the first release to include support for the Symbian platform, with integration into the S60 framework. The port to Symbian and S60 provides all functionality required to develop rich end-user applications for devices running S60 3.1 and later.

See the The Symbian platform - Introduction to Qt for more information.

## Animation Framework

The animation framework helps build highly animated, high-performance GUIs without the hassle of managing complex structures, timers, and easing curves, not to mention the large state graphs that all animated GUIs tend to be full of.

The framework makes it easy to animate QObjects, including QWidgets, by allowing Qt properties to be animated. It also allows creating custom animations and interpolation functions. Graphics views are not left out; one can animate QGraphicsWidgets and new QGraphicsObjects which inherit from QGraphicsItem (and thereby enable properties).

Animations are controlled using easing curves and can be grouped together. This enables animations of arbitrary complexity.

The API is easy to grasp with functions such as start(), stop(), pause(), and currentTime(). Here is an image from one of the examples that come with the framework:

The animation framework also plugs into the new Qt Statemachine by allowing an animation to be played when transitions are triggered. The state machine framework is introduced in 4.6 and is described below.

See The Animation Framework documentation for more information.

## State Machine Framework

The state machine framework provides a robust state chart implementation based on Harel statecharts and SCXML. Qt's API lets you construct such state graphs and execute them. The key benefits of a state machine are:

- Simplify complex application semantics.
- Use of states to reduce code bloat.
- Use states to improve maintainability.
- Makes event-driven programming robust and more reusable.

It is especially the last item here that makes using a state machine worthwhile. A key characteristic of event-driven systems (such as Qt applications) is that behavior often depends not only on the last or current event, but also the events that preceded it. With statecharts, this information is easy to express.

The framework fits neatly into Qt by allowing transitions to trigger on signals and QEvents. By inserting animations into the state machine, it is also easier to use the framework for animating GUIs, for instance.

See The State Machine Framework documentation for more information.

## Multi-Touch and Gestures

Support for multi-touch input enables users to interact with many parts of a user interface at the same time, and provides the basis for gestures. Additional infrastructure for gesture recognition allows a sequence of touch inputs to be combined to create gestures that can be used to activate features and trigger actions in an application.

This new functionality brings a number of benefits:

- Allows users to interact with applications in more natural ways.
- Simplifies finger-based interaction with UI components.
- Combines support for common basic gestures and multi-touch gestures in a single general framework.
- Enables extensibility by design.

See the QTouchEvent class documentation for more information on multi-touch input and QGestureEvent for gestures.

## DOM access API

Web pages and XML both have very complex document object models. The W3C selector API provides a very simple way to access and manipulate such structures. This API makes it intuitive to access DOM, helps reuse CSS selector knowledge, and gives little maintenance or footprint overhead.

         QWebElement document = frame->documentElement();
         /* Assume the document has the following structure:

            <p class=intro>
              <span>Intro</span>
              <span>Snippets</span>
            </p>
            <p>
              <span>Content</span>
              <span>Here</span>
            </p>
         */

         QList<QWebElement> allSpans = document.findAll("span");
         QList<QWebElement> introSpans = document.findAll("p.intro span");

See the QWebElement class documentation for more information.

## Performance Optimizations

As always, Qt continuously strive to optimize its performance. For this release, we have:

- Rewritten the QGraphicsView rendering algorithm.
- Made QPixmapCache support efficient Key datastructure.
- Reduced overhead in QNetworkAccessManager.
- Added the QContiguousCache class, which provides efficient caching of contiguous data.
- Added support for hardware-accelerated rendering through OpenVG
- Removed Win9x support.

## Graphics Effects

Effects can be used to alter the appearance of UI elements such as QGraphicsItems and QWidgets. A couple of standard effects such as blurring, colorizing and drop shadow are provided, and it is possible to implement custom effects.

See the QGraphicsEffect class documentation for more information.

## XML Schema Validation

The QtXmlPatterns module can now be used to validate schemas, either through C++ APIs in the Qt application, or using the xmlpatternsvalidator command line utility. The implementation of XML Schema Validation supports the specification version 1.0 in large parts.

See the XML Processing and QXmlSchema class documentation for more information.

## Qt3D enablers

As more of Qt, and more of the applications built on Qt go 3D, API's should be provided to simplify this. Mainly, the new API aims to make it more easy to create 3D applications with OpenGL. It will also unify the Qt OpenGL codebase, and enable cross-platform 3D codebase.

The main features of the Qt3D enablers are currently: Math primitives for matrix multiplication, vectors, quaternions (client-side), and API for vertex and fragment shaders, GLSL/ES. Future research will, among other things include stencils, scissors, vertex buffers and arrays, texture manipulation, and geometry shaders.

## Multimedia Services

Qt 4.6 comes with new classes for handling audio. These classes provide low-level access to the system's audio system. By specifying the audio format (QAudioFormat) and supplying audio data through a QIODevice, you get direct access to the functionality of the sound device. The API also comes with functions to query audio devices for which audio formats they support.

See the QtMultimedia Module documentation for more information.

## New Classes, Functions, Macros, etc.

Links to new classes, functions, macros, and other items introduced in Qt 4.6.

- New Classes
- New Member Functions
- New Global Functions
- New Macros

### New Classes

A | QAbstractAnimation |  | QGestureRecognizer |  | QMouseEventTransition |  | QSymbianEvent
| QAbstractState |  | QGLFramebufferObjectFormat | P | QPanGesture | T | QTapAndHoldGesture
| QAbstractTransition |  | QGLShader |  | QParallelAnimationGroup |  | QTapGesture
| QAbstractVideoBuffer |  | QGLShaderProgram |  | QPauseAnimation |  | QTileRules
| QAbstractVideoSurface |  | QGraphicsAnchor |  | QPinchGesture |  | QTouchEvent
| QAnimationGroup |  | QGraphicsAnchorLayout |  | QProcessEnvironment |  | TouchPoint (QTouchEvent)
| QAudioDeviceInfo |  | QGraphicsBlurEffect |  | QPropertyAnimation | V | QVariantAnimation
| QAudioFormat |  | QGraphicsColorizeEffect |  | QProxyStyle |  | QVector2D
| QAudioInput |  | QGraphicsDropShadowEffect | Q | QQuaternion |  | QVector3D
| QAudioOutput |  | QGraphicsEffect | S | QS60MainApplication |  | QVector4D
C | const_iterator (QWebElementCollection) |  | QGraphicsObject |  | QS60MainAppUi |  | QVideoFrame
| QContiguousCache |  | QGraphicsOpacityEffect |  | QS60MainDocument |  | QVideoSurfaceFormat
D | QDBusServiceWatcher |  | QGraphicsRotation |  | QS60Style | W | QWebElement
E | QEasingCurve |  | QGraphicsScale |  | QScopedArrayPointer |  | QWebElementCollection
| ErrorPageExtensionOption (QWebPage) |  | QGraphicsTransform |  | QScopedPointer |  | QWebInspector
| ErrorPageExtensionReturn (QWebPage) |  | QGraphicsWebView |  | QSequentialAnimationGroup |  | WrappedEvent (QStateMachine)
| QEventTransition | H | QHistoryState |  | SignalEvent (QStateMachine) | X | QXmlSchema
F | QFinalState | I | iterator (QWebElementCollection) |  | QSignalTransition |  | QXmlSchemaValidator
G | QGenericMatrix | K | QKeyEventTransition |  | QState |
| QGesture | M | QMargins |  | QStateMachine |
| QGestureEvent |  | QMatrix4x4 |  | QSwipeGesture |

### New Member Functions

Class QWebSettings:

void | clearMemoryCaches ()
QString | defaultTextEncoding () const
void | enablePersistentStorage ( const QString & path = QString() )
QString | localStoragePath () const
QString | offlineWebApplicationCachePath ()
qint64 | offlineWebApplicationCacheQuota ()
void | setDefaultTextEncoding ( const QString & encoding )
void | setLocalStoragePath ( const QString & path )
void | setOfflineWebApplicationCachePath ( const QString & path )
void | setOfflineWebApplicationCacheQuota ( qint64 maximumSize )

Class QWebSecurityOrigin:

void | addLocalScheme ( const QString & scheme )
QStringList | localSchemes ()
void | removeLocalScheme ( const QString & scheme )

Class QHelpSearchEngine:

int | hitCount () const

Class QScriptString:

quint32 | toArrayIndex ( bool * ok = 0 ) const

Class QGLFramebufferObject:

void | blitFramebuffer ( QGLFramebufferObject * target, const QRect & targetRect, QGLFramebufferObject * source, const QRect & sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST )
bool | hasOpenGLFramebufferBlit ()

Class QProcessEnvironment:

QProcessEnvironment | systemEnvironment ()

Class QNetworkRequest:

QObject * | originatingObject () const
void | setOriginatingObject ( QObject * object )

Class QSslSocket:

void | connectToHostEncrypted ( const QString & hostName, quint16 port, const QString & sslPeerName, OpenMode mode = ReadWrite )
void | ignoreSslErrors ( const QList<QSslError> & errors )
void | setSocketOption ( QAbstractSocket::SocketOption option, const QVariant & value )
QVariant | socketOption ( QAbstractSocket::SocketOption option )

Class QWebView:

QPainter::RenderHints | renderHints () const
void | setRenderHint ( QPainter::RenderHint hint, bool enabled = true )
void | setRenderHints ( QPainter::RenderHints hints )

Class QNetworkAccessManager:

QNetworkReply * | deleteResource ( const QNetworkRequest & request )

Class QSharedPointer:

QSharedPointer<X> | objectCast () const

Class QWeakPointer:

T * | data () const
QWeakPointer<T> | operator= ( const QObject * obj )

Class QNetworkProxyFactory:

void | setUseSystemConfiguration ( bool enable )

Class QSystemLocale:

virtual QLocale | fallbackLocale () const

Class QNetworkCacheMetaData:

AttributesMap | attributes () const
void | setAttributes ( const AttributesMap & attributes )

Class QGraphicsLayout:

void | addChildLayoutItem ( QGraphicsLayoutItem * layoutItem )

Class QXmlStreamReader:

QString | readElementText ( ReadElementTextBehaviour behaviour )
bool | readNextStartElement ()
void | skipCurrentElement ()

Class QSyntaxHighlighter:

void | rehighlightBlock ( const QTextBlock & block )

Class QGraphicsView:

bool | isTransformed () const

Class QWebHitTestResult:

QWebElement | element () const
QWebElement | enclosingBlockElement () const
QWebElement | linkElement () const

Class QWebFrame:

void | contentsSizeChanged ( const QSize & size )
QWebElement | documentElement () const
QWebElementCollection | findAllElements ( const QString & selectorQuery ) const
QWebElement | findFirstElement ( const QString & selectorQuery ) const
void | loadFinished ( bool ok )
void | loadStarted ()
void | render ( QPainter * painter, RenderLayer layer, const QRegion & clip = QRegion() )
QRect | scrollBarGeometry ( Qt::Orientation orientation ) const
void | setFocus ()

Class QWebDatabase:

void | removeAllDatabases ()

Class QGraphicsScene:

QGraphicsItem * | activePanel () const
bool | isActive () const
QGraphicsItem * | itemAt ( const QPointF & position, const QTransform & deviceTransform ) const
QGraphicsItem * | itemAt ( qreal x, qreal y, const QTransform & deviceTransform ) const
QList<QGraphicsItem *> | items ( const QPointF & pos, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform & deviceTransform = QTransform() ) const
QList<QGraphicsItem *> | items ( const QRectF & rect, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform & deviceTransform = QTransform() ) const
QList<QGraphicsItem *> | items ( const QPolygonF & polygon, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform & deviceTransform = QTransform() ) const
QList<QGraphicsItem *> | items ( const QPainterPath & path, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform & deviceTransform = QTransform() ) const
QList<QGraphicsItem *> | items ( qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform & deviceTransform = QTransform() ) const
bool | sendEvent ( QGraphicsItem * item, QEvent * event )
void | setActivePanel ( QGraphicsItem * item )
void | setSelectionArea ( const QPainterPath & path, const QTransform & deviceTransform )
void | setSelectionArea ( const QPainterPath & path, Qt::ItemSelectionMode mode, const QTransform & deviceTransform )

Class QWebPage:

QWebFrame * | frameAt ( const QPoint & pos ) const
bool | shouldInterruptJavaScript ()

Class QPrintPreviewWidget:

int | pageCount () const

Class QNetworkReply:

void | ignoreSslErrors ( const QList<QSslError> & errors )
bool | isFinished () const
bool | isRunning () const

Class QGraphicsItem:

bool | acceptTouchEvents () const
bool | filtersChildEvents () const
QGraphicsItem * | focusItem () const
QGraphicsItem * | focusProxy () const
QGraphicsEffect * | graphicsEffect () const
Qt::InputMethodHints | inputMethodHints () const
bool | isActive () const
bool | isBlockedByModalPanel ( QGraphicsItem ** blockingPanel = 0 ) const
bool | isPanel () const
QGraphicsItem * | panel () const
PanelModality | panelModality () const
QGraphicsObject * | parentObject () const
qreal | rotation () const
qreal | scale () const
void | setAcceptTouchEvents ( bool enabled )
void | setActive ( bool active )
void | setFiltersChildEvents ( bool enabled )
void | setFocusProxy ( QGraphicsItem * item )
void | setGraphicsEffect ( QGraphicsEffect * effect )
void | setInputMethodHints ( Qt::InputMethodHints hints )
void | setPanelModality ( PanelModality panelModality )
void | setRotation ( qreal angle )
void | setScale ( qreal factor )
void | setTransformOriginPoint ( const QPointF & origin )
void | setTransformOriginPoint ( qreal x, qreal y )
void | setTransformations ( const QList<QGraphicsTransform *> & transformations )
void | setX ( qreal x )
void | setY ( qreal y )
void | stackBefore ( const QGraphicsItem * sibling )
QGraphicsObject * | toGraphicsObject ()
const QGraphicsObject * | toGraphicsObject () const
QPointF | transformOriginPoint () const
QList<QGraphicsTransform *> | transformations () const

Class QAbstractXmlNodeModel:

QSourceLocation | sourceLocation ( const QXmlNodeModelIndex & index ) const

Class QScriptEngineDebugger:

DebuggerState | state () const

Class QGraphicsLayoutItem:

bool | ownedByLayout () const
void | setOwnedByLayout ( bool ownership )

Class QXmlQuery:

bool | setFocus ( const QString & focus )

Class QStyleOptionGraphicsItem:

qreal | levelOfDetailFromTransform ( const QTransform & worldTransform )

Class QDBusConnection:

bool | connect ( const QString & service, const QString & path, const QString & interface, const QString & name, const QStringList & argumentMatch, const QString & signature, QObject * receiver, const char * slot )
bool | disconnect ( const QString & service, const QString & path, const QString & interface, const QString & name, const QStringList & argumentMatch, const QString & signature, QObject * receiver, const char * slot )

Class QDBusPendingCall:

QDBusPendingCall | fromCompletedCall ( const QDBusMessage & msg )
QDBusPendingCall | fromError ( const QDBusError & error )

### New Global Functions

QDataStream & | operator<< ( QDataStream & stream, const QWebHistory & history )
QDataStream & | operator>> ( QDataStream & stream, QWebHistory & history )
void | qDrawBorderPixmap ( QPainter * painter, const QRect & target, const QMargins & margins, const QPixmap & pixmap )
bool | qFuzzyCompare ( const QTransform & t1, const QTransform & t2 )
bool | qFuzzyCompare ( const QMatrix & m1, const QMatrix & m2 )
QSharedPointer<X> | qSharedPointerObjectCast ( const QWeakPointer<T> & other )
QSharedPointer<X> | qSharedPointerObjectCast ( const QSharedPointer<T> & other )
QString | qtTrId ( const char * id, int n = -1 )

### New Macros

| QBENCHMARK_ONCE
| QT_TRID_NOOP ( id )