source: trunk/doc/src/qt4-intro.qdoc@ 1039

Last change on this file since 1039 was 865, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.3 sources from branches/vendor/nokia/qt.

File size: 43.4 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the documentation of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:FDL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in a
14** written agreement between you and Nokia.
15**
16** GNU Free Documentation License
17** Alternatively, this file may be used under the terms of the GNU Free
18** Documentation License version 1.3 as published by the Free Software
19** Foundation and appearing in the file included in the packaging of this
20** file.
21**
22** If you have questions regarding the use of this file, please contact
23** Nokia at [email protected].
24** $QT_END_LICENSE$
25**
26****************************************************************************/
27
28/*!
29 \page qt4-intro.html
30 \title What's New in Qt 4
31
32 \startpage index.html Qt Reference Documentation
33 \nextpage The Tulip Container Classes
34
35 This document covers the most important differences between Qt 3
36 and Qt 4. Although it is not intended to be a comprehensive
37 porting guide, it tells you about the most important portability
38 issues that you may encounter. It also explains how to turn on Qt
39 3 compatibility support.
40
41 \section1 New Technologies in Qt 4
42
43 Qt 4 introduces the following core technologies:
44
45 \list
46 \o \l{The Tulip Container Classes}{Tulip}, a new set of template container classes.
47
48 \o \l{The Interview Framework}{Interview}, a model/view architecture for item views.
49
50 \o \l{The Arthur Paint System}{Arthur}, the Qt 4 painting framework.
51
52 \o \l{The Scribe Classes}{Scribe}, the Unicode text renderer with a public API
53 for performing low-level text layout.
54
55 \o \l{The Qt 4 Main Window Classes}{Mainwindow}, a modern action-based
56 mainwindow, toolbar, menu, and docking architecture.
57
58 \o The new \l{The New Qt Designer}{\QD} user interface design tool.
59 \endlist
60
61 \section1 Recent Additions to Qt 4
62
63 The following features have been added to Qt since the first release of Qt 4.
64
65 In Qt 4.7:
66 \list
67 \o Declarative UI Development with \l{Qt Quick}, technologies for creating
68 fluid, dynamic user interfaces.
69 \o Support for \l{Bearer Management}{network bearer management}, enabling
70 features such as control over network interfaces and support for roaming
71 between networks.
72 \o Feature and performance improvements in QtWebKit, including a new tiled
73 backing store, control over scroll bars used in frames and framesets,
74 accelerated compositing and \l{The QtWebKit Bridge}{support for hybrid
75 development}.
76 \o General performance improvements, including the use of "alien widgets"
77 on Mac OS X, the QStaticText class for optimized text rendering, a new
78 \l{QPainter::drawPixmapFragments()}{API for rendering pixmap fragments}
79 and an updated version of the JavaScriptCore engine for the QtScript
80 module with improved performance.
81 \endlist
82
83 In Qt 4.6:
84 \list
85 \o Support for \l{The Symbian platform - Introduction to Qt}{the Symbian Platform}
86 as a mainstream Qt platform, with integration into the S60 framework.
87 \o The \l{The Animation Framework}{animation framework} allows animations to be
88 created using both widgets and graphics items.
89 \o The \l{The State Machine Framework}{state machine framework} provides a robust
90 state chart implementation based on Harel statecharts and SCXML.
91 \o Support for \l{QTouchEvent}{touch input} and \l{Gestures Programming}{gestures}
92 enable developers to create intuitive user interfaces for touch-based devices.
93 \o A \l{QWebElement}{DOM access API} for QtWebKit provides a cleaner and safer way
94 to access elements and structures of Web pages without the use of JavaScript.
95 \o A collection of performance improvements, covering QGraphicsView, QPixmapCache,
96 QNetworkAccessManager, QContiguousCache class, hardware-accelerated rendering
97 support through \l{OpenVG Rendering in Qt}{OpenVG}, and the removal of Win9x
98 support.
99 \o A collection of \l{QGraphicsEffect}{graphics effects} make it easy to apply
100 and simple effects to graphics items and combine them to produce more complex
101 effects.
102 \o Support for XML schema validation in the QtXmlPatterns module covering
103 large parts of version 1.0 of the specification.
104 \o Qt3D enablers, including math primitives for \l{QMatrix4x4}{matrix multiplication},
105 \l{QVector3D}{vectors}, \l{QQuaternion}{quaternions} (client-side), and an API
106 for \l{QGLShader}{vertex and fragment shaders}, GLSL/ES.
107 \o \l{QtMultimedia Module}{Multimedia services} providing low-level access to the
108 system's audio system.
109 \endlist
110
111 In Qt 4.5:
112 \list
113 \o The WebKit browser engine included with Qt has been
114 upgraded to the latest upstream (trunk) version of WebKit,
115 bringing the latest features and improvements to Qt applications.
116 \o Qt for Mac OS X has been substantially rewritten to use
117 Apple's Cocoa API, enabling Qt applications to be deployed on
118 64-bit Macintosh hardware.
119 \o The QtXmlPatterns module has been extended to cover XSLT, a
120 transformation language for XML documents.
121 \o Qt Script introduced its debugger,
122 providing error reporting for scripts, and to let users track down
123 bugs in their own scripts.
124 \o Qt 4.5 includes support for writing rich text documents as
125 OpenDocument files via the newly-introduced QTextDocumentWriter
126 class.
127 \o Qt Linguist can load and edit multiple translation
128 files simultaneously.
129 \o Support for ARGB top-level widgets (i.e., translucent
130 windows).
131 \endlist
132
133 In Qt 4.4:
134 \list
135 \o \l{Webkit in QT}{Qt WebKit integration}, making it possible for developers
136 to use a fully-featured Web browser to display documents and access online
137 services.
138 \o A multimedia API provided by the \l{Phonon Overview}{Phonon Multimedia Framework}.
139 \o \l{QtXmlPatterns Module}{XQuery and XPath} support, providing facilities for
140 XML processing beyond that supported by the QtXml module.
141 \o Support for embedded widgets in \l{Graphics View} scenes.
142 \o The \l{Thread Support in Qt}{QtConcurrent framework} for
143 concurrent programming using Qt paradigms and threading features.
144 \o An \l{QtHelp Module}{improved help system} that can be used in conjunction
145 with Qt Assistant or as an independent help resource manager.
146 \o Printing system improvements, including the QPrinterInfo, QPrintPreviewWidget
147 and QPrintPreviewDialog classes.
148 \o Support for \l{Windows CE - Introduction to using Qt}{Qt for Windows CE} as
149 a mainstream Qt platform.
150 \o Improvements in performance of Qt for Embedded Linux and extended support for
151 display hardware.
152 \endlist
153
154 In Qt 4.3:
155 \list
156 \o Support for different \l{The Qt 4 Main Window Classes}{main window paradigms and styles},
157 such as those found in Visual Studio or KDevelop.
158 \o The \l{QtScript} module, providing support for application scripting with ECMAScript.
159 \o Improved graphics features, including an experimental Direct3D paint engine
160 and improved provision for hardware accelerated rendering with OpenGL, and
161 support for OpenGL ES in Qt for Embedded Linux.
162 \o \l{QSvgGenerator}{Scalable Vector Graphics (SVG) export}, allowing SVG drawings to
163 be created using the standard QPainter API.
164 \o Support for arbitrary matrix transformations and set operations on painter paths.
165 \o Native look and feel on Windows Vista; improved look and feel on Mac OS X.
166 \o An improved \l{QMdiArea}{Multiple Document Interface (MDI)} implementation.
167 \o Continuous improvements to \QD, including support for
168 \l{Qt Designer's Widget Editing Mode#The Property Editor}{dynamic properties}.
169 \o Support for Secure Socket Layer (SSL) communications via the QSslSocket class.
170 \o Support for XML Localization Interchange File Format (XLIFF) files in \QL.
171 \o A new font subsystem for Qt for Embedded Linux.
172 \endlist
173
174 In Qt 4.2:
175 \list
176 \o The \l{Graphics View} framework for producing interactive graphics.
177 \o \l{Desktop Integration}{Desktop integration} facilities for applications.
178 \o \l{Qt Style Sheets} enable easy, yet powerful customization of
179 user interfaces.
180 \o Support for the \l{intro-to-dbus.html}{D-Bus} Inter-Process Communication (IPC) and Remote Procedure Calling (RPC) mechanism.
181 \o An \l{Undo Framework}{Undo framework} based on the
182 \l{Books about GUI Design#Design Patterns}{Command pattern}.
183 \o Support for model-based \l{QCompleter}{text completion} in standard and
184 custom widgets.
185 \o New widgets and GUI features, such as QCalendarWidget and
186 QGLFramebufferObject.
187 \o Classes to provide higher level application infrastructure, such as
188 QFileSystemWatcher and QDataWidgetMapper.
189 \endlist
190
191 In Qt 4.1:
192 \list
193 \o Integrated support for rendering
194 \l{The Arthur Paint System#SVG Rendering Support}{Scalable Vector Graphics}
195 (SVG) drawings and animations.
196 \o Support for
197 \l{QWidget#Transparency and Double Buffering}{child widget transparency}
198 on all platforms.
199 \o A Portable Document Format (PDF) backend for Qt's printing system.
200 \o A \l{QTestLib Manual}{unit testing framework} for Qt applications and
201 libraries.
202 \o Modules for \l{QtDesigner}{extending \QD} and
203 \l{QtUiTools}{dynamic user interface building}.
204 \o New \l{Proxy Models}{proxy models} to enable view-specific sorting and
205 filtering of data displayed using item views.
206 \o Support for \l{Installing Qt for Mac OS X}{universal binaries} on Mac OS X.
207 \o Additional features for developers using \l{QtOpenGL}{OpenGL}, such as
208 support for pixel and sample buffers.
209 \o A flexible \l{QSyntaxHighlighter}{syntax highlighting class} based on the
210 \l{Scribe} rich text framework.
211 \o Support for \l{QNetworkProxy}{network proxy} servers using the SOCKS5
212 protocol.
213 \o Support for OLE verbs and MIME data handling in \l{ActiveQt}.
214 \endlist
215
216 For more information about improvements in each Qt release, see
217 the \l{http://qt.nokia.com/developer/changes/}
218 {detailed lists of changes}.
219
220 \section1 Significant Improvements
221
222 The following modules have been significantly improved for Qt 4:
223
224 \list
225 \o A fully cross-platform \l{accessibility}
226 module, with support for the emerging SP-API Unix standard in
227 addition to Microsoft and Mac Accessibility.
228 \o The \l{qt4-sql.html}{SQL module}, which is now based on the
229 Interview model/view framework.
230 \o The \l{qt4-network.html}{network module}, with better support
231 for UDP and synchronous sockets.
232 \o The \l{qt4-styles.html}{style API}, which is now decoupled from
233 the widgets, meaning that you can draw any user interface element on
234 any device (widget, pixmap, etc.).
235 \o Enhanced \l{qt4-threads.html}{thread support}, with signal-slot
236 connections across threads and per-thread event loops.
237 \o A new \l{resource system} for embedding images
238 and other resource files into the application executable.
239 \endlist
240
241 \section1 Build System
242
243 Unlike previous Qt releases, Qt 4 is a collection of smaller
244 libraries:
245
246 \table
247 \header \o Library \o Description
248 \row \o \l{QtCore} \o Core non-GUI functionality
249 \row \o \l{QtGui} \o Core GUI functionality
250 \row \o \l{QtNetwork} \o Network module
251 \row \o \l{QtOpenGL} \o OpenGL module
252 \row \o \l{QtSql} \o SQL module
253 \row \o \l{QtSvg} \o SVG rendering classes
254 \row \o \l{QtXml} \o XML module
255 \row \o \l{Qt3Support} \o Qt 3 support classes
256 \row \o \l{QAxContainer} \o ActiveQt client extension
257 \row \o \l{QAxServer} \o ActiveQt server extension
258 \row \o \l{QtHelp} \o Classes for integrating online documentation
259 \row \o \l{QtDesigner} \o Classes for extending and embedding Qt Designer
260 \row \o \l{QtUiTools} \o Classes for dynamic GUI generation
261 \row \o \l{QtTest} \o Tool classes for unit testing
262 \endtable
263
264 QtCore contains tool classes like QString, QList, and QFile, as
265 well as kernel classes like QObject and QTimer. The QApplication
266 class has been refactored so that it can be used in non-GUI
267 applications. It is split into QCoreApplication (in \l QtCore)
268 and QApplication (in \l QtGui).
269
270 This split makes it possible to develop server applications using Qt
271 without linking in any unnecessary GUI-related code and without
272 requiring GUI-related system libraries to be present on the target
273 machine (e.g. Xlib on X11, Carbon on Mac OS X).
274
275 If you use qmake to generate your makefiles, qmake will by default
276 link your application against QtCore and QtGui. To remove the
277 dependency upon QtGui, add the line
278
279 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 0
280
281 to your .pro file. To enable the other libraries, add the line
282
283 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 1
284
285 Another change to the build system is that moc now understands
286 preprocessor directives. qmake automatically passes the defines set
287 for your project (using "DEFINES +=") on to moc, which has its own
288 built-in C++ preprocessor.
289
290 To compile code that uses UI files, you will also need this line in
291 the .pro file:
292
293 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 2
294
295 \section1 Include Syntax
296
297 The syntax for including Qt class definitions has become
298
299 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 3
300
301 For example:
302
303 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 4
304
305 This is guaranteed to work for any public Qt class. The old syntax,
306
307 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 5
308
309 still works, but we encourage you to switch to the new syntax.
310
311 If you attempt to include a header file from a library that isn't
312 linked against the application, this will result in a
313 compile-time warning (e.g., "QSqlQuery: No such file or
314 directory"). You can remedy to this problem either by removing
315 the offending include or by specifying the missing library in the
316 QT entry of your \c .pro file (see \l{Build System} above).
317
318 To include the definitions for all the classes in a library, simply
319 specify the name of that library. For example:
320
321 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 6
322
323 \section1 Namespaces
324
325 Qt 2 introduced a class called Qt for global-like constants
326 (e.g., \c{Qt::yellow}). The C++ namespace construct was not used
327 because not all compilers understood it when it was released.
328
329 With Qt 4, the Qt class has become the Qt namespace. If you want
330 to access a constant that is part of the Qt namespace, prefix it
331 with \c Qt:: (e.g., \c{Qt::yellow}), or add the directive
332
333 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 7
334
335 at the top of your source files, after your \c #include
336 directives. If you use the \c{using namespace} syntax you don't
337 need the prefix (e.g., \c yellow is sufficient).
338
339 When porting Qt 3 applications, you may run into some source
340 compatibility problems with some of these symbols. For example,
341 in Qt 3, it was legal to write \c QWidget::yellow instead of \c
342 Qt::yellow, because QWidget inherited from Qt. This won't work in
343 Qt 4; you must write \c Qt::yellow or add the "using namespace"
344 directive and drop the \c Qt:: prefix.
345
346 The \l{qt3to4 - The Qt 3 to 4 Porting Tool}{qt3to4} porting tool
347 automates this conversion.
348
349 \section1 QObject/QWidget Constructors
350
351 In Qt 4 we have tried to simplify the constructors of QObject/QWidget
352 subclasses. This makes subclassing easier, at the same time as it
353 helps make the Qt library more efficient.
354
355 Constructors no longer take a "const char *name" parameter. If
356 you want to specify a name for a QObject, you must call
357 QObject::setObjectName() after construction. The object name is
358 now a QString. The reasons for this change are:
359
360 \list
361 \o Code that used it looked confusing, for example:
362
363 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 8
364
365 \c label1 is a QLabel that displays the text "Hello"; \c
366 label2 is a QLabel with no text, with the object name
367 "Hello".
368
369 \o From surveys we did, most users didn't use the name, although
370 they blindly followed Qt's convention and provided a "const
371 char *name" in their subclasses's constructors. For example:
372
373 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 9
374
375 \o The name parameter was in Qt since version 1, and it always
376 was documented as: "It is not very useful in the current
377 version of Qt, but it will become increasingly important in
378 the future." Ten years later, it still hasn't fulfilled its
379 promise.
380 \endlist
381
382 QWidget's \c WFlags data type has been split in two:
383 Qt::WindowFlags specifies low-level window flags (the type of
384 window and the frame style), whereas Qt::WidgetAttribute
385 specifies various higher-level attributes about the widget (e.g.,
386 WA_StaticContents). Widget attributes can be set at any time
387 using QWidget::setAttribute(); low-level window flags can be
388 passed to the QWidget constructor or set later using
389 QWidget::setParent(). As a consequence, the constructors of most
390 QWidget subclasses don't need to provide a \c WFlags parameter.
391
392 The \e parent parameter of all QObject classes in Qt defaults to
393 a 0 pointer, as it used to do in Qt 1. This enables a style of
394 programming where widgets are created without parents and then
395 inserted in a layout, at which point the layout automatically
396 reparents them.
397
398 \section1 Dynamic Casts
399
400 Qt 4 provides a qobject_cast<>() function that performs a dynamic cast
401 based on the meta-information generated by moc for QObject
402 subclasses. Unlike the standard C++ dynamic_cast<>() construct,
403 qobject_cast<>() works even when RTTI is disabled, and it works correctly
404 across DLL boundaries.
405
406 Here's the Qt 3 idiom to cast a type to a subtype:
407
408 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 10
409
410 The Qt 4 idiom is both cleaner and safer, because typos will always
411 result in compiler errors:
412
413 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 11
414
415 \section1 QPointer<T>
416
417 The QPointer<T> class provides a pointer to type T (where T inherits
418 from QObject) that is automatically set to 0 when the referenced
419 object is destroyed. Guarded pointers are useful whenever you want to
420 store a pointer to an object you do not own.
421
422 Example:
423
424 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 12
425
426 QPointer<T> is more or less the same as the old QGuardedPtr<T> class,
427 except that it is now implemented in a much more lightweight manner
428 than before. The cost of one QPointer<T> object is now approximately
429 the same as that of a signal--slot connection.
430
431 \section1 Paint Events
432
433 Qt 4 supports double buffering transparently on all platforms. This
434 feature can be turned off on a per-widget basis by calling
435 QWidget::setAttribute(Qt::WA_PaintOnScreen).
436
437 A consequence of this is that all painting must now be done from the
438 paintEvent() function. This is also required by the HIView API on Mac
439 OS X. In practice, this is seldom a problem, since you can call
440 update() from anywhere in your code to create a paint event, with the
441 region to update as the argument.
442
443 To help porting, QWidget supports a Qt::WA_PaintOutsidePaintEvent
444 attribute that can be set to make it possible to paint outside
445 \l{QWidget::paintEvent()}{paintEvent()} on Windows and X11.
446
447 \section1 Qt 3 Support Layer
448
449 Qt 4 provides an extension library that applications based on Qt 3,
450 called Qt3Support, that Qt applications can link against. This allows
451 for more compatibility than ever before, without bloating Qt.
452
453 \list
454 \o Classes that have been replaced by a different class with the
455 same name, such as QListView, and classes that no longer exist in Qt 4
456 are available with a \c 3 in their name (e.g., Q3ListView, Q3Accel).
457
458 \o Other classes provide compatibility functions. Most of these are
459 implemented inline, so that they don't bloat the Qt libraries.
460 \endlist
461
462 To enable the Qt 3 support classes and functions, add the line
463
464 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 13
465
466 to your \c .pro file.
467
468 On Visual C++ 7 and GCC 3.2+, using compatibility functions often results
469 in a compiler warning (e.g., "'find' is deprecated"). If you want to turn
470 off that warning, add the line
471
472 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 14
473
474 to your \c .pro file.
475
476 If you want to use compatibility functions but don't want to link
477 against the Qt3Support library, add the line
478
479 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 15
480
481 or
482
483 \snippet doc/src/snippets/code/doc_src_qt4-intro.qdoc 16
484
485 to your \c .pro file, depending on whether you want compatibility
486 function calls to generate compiler warnings or not.
487*/
488
489/*!
490 \page qt4-7-intro.html
491 \title What's New in Qt 4.7
492
493 Qt 4.7 provides many improvements and enhancements over the
494 previous releases in the Qt 4 series. This document covers the
495 most important features in this release, separated by category.
496
497 A list of other Qt 4 features can be found on the \bold{\l{What's
498 New in Qt 4}} page.
499
500 \section1 Declarative UI Development with Qt Quick
501
502 \image quick_screens.png
503
504 Qt 4.7 introduces \l{Qt Quick}, the Qt UI Creation Kit. that enables
505 the creation of dynamic user interfaces, easier and more effective
506 than possible with existing UI technologies. This UI Creation Kit
507 consists of three technologies:
508
509 \list
510 \i QML is a declarative language oriented on JavaScript that utilizes
511 Qt's Meta-Object capabilities to enable designers and developers to
512 collaborate tightly and create animated and fluid user experiences,
513 using existing knowledge in script language and design.
514
515 \i Qt Declarative is a C++ library that provides the underlying engine,
516 which translates the declarative description of the UI in QML into
517 items on a QGraphicsScene. The library also provides APIs to bind
518 custom C++ types and elements to QML, and to connect the QML UI with
519 the underlying application logic written in C++.
520
521 \i Qt Creator has been improved to support interactive editing of
522 QML UIs through drag-and-drop. The text editor supports the QML
523 syntax and provides authoring assistance such as auto-completion,
524 error lookup, help lookup and easy preview of QML UI's. The Qt
525 Quick features in Qt Creator will be released with Qt Creator 2.1
526 \endlist
527
528 \section1 Network Bearer Management
529
530 Bearer Management controls the connectivity state of the system.
531 The new Bearer Management API in the QtNetwork module allows the
532 application to identify whether the system is online and how many
533 interfaces there are, as well as start and stop interfaces, or
534 roam transparently between access points.
535
536 QNetworkAccessManager uses this API for HTTP level roaming.
537
538 \section1 Feature Improvements in QtWebKit
539
540 The QGraphicsWebView class has a new tiled backing store, which
541 improves scrolling and zooming performance. You can even create
542 animated zoom-in or zoom-out effects (see
543 QWebSettings::TiledBackingStoreEnabled).
544
545 On mobile platforms, it is often useful to avoid displaying
546 separate scrollbars for iframes and framesets. If you switch on
547 frame flattening, QtWebKit will resize frames to fit their content
548 to avoid separate scrollbars (see
549 QWebSettings::FrameFlatteningEnabled).
550
551 Qt 4.7 adds support for accelerated compositing, which enhances
552 the performance of CSS animations and transitions. Read more in
553 \l{http://labs.trolltech.com/blogs/2010/05/17/qtwebkit-now-accelerates-css-animations-3d-transforms/}{this blog}.
554
555 For hybrid QtWebKit and C++ projects, Qt 4.7 has added support for
556 transporting \l{QPixmap}s between Qt C++ and WebKit. We have also
557 improved the documentation for hybrid development. Read more here:
558 \l{The QtWebKit Bridge}.
559
560 \section1 QtWebKit Performance Benchmarks
561
562 We have introduced a set of performance benchmarks for QtWebKit,
563 and made numerous improvements in rendering performance, page
564 loading performance, scrolling performance and CSS performance.
565 Here are some examples from the benchmarks run on a 64-bit Linux
566 workstation with the raster graphics system.
567
568 In a benchmark that measures the scrolling performance on popular
569 websites, we found out that Qt 4.7.0 on this platform is 350%
570 faster than Qt 4.6.0, thanks to several rendering related
571 improvements.
572
573 Our page loading benchmark shows an improvement of 16% in Qt 4.7.0
574 from Qt 4.6.0. This is due to improvements in text layout speed,
575 image decoding, resource loading and event handling.
576
577 Several CSS animation benchmarks indicate a speed improvement of
578 31% from Qt 4.6.0 to Qt 4.7.0. These benchmarks are effectively
579 showing the improvement we get from accelerated compositing (see
580 above).
581
582 \section1 Other Performance Related Improvements
583
584 In addition to the QtWebKit module, performance has been a focus
585 area in Qt 4.7 throughout the Qt framework. Here are a couple of
586 examples about performance related feature improvements.
587
588 On Mac OS X, Qt now uses a different widget implementation (called
589 "alien widgets"), which improves the responsiveness of
590 applications that have complex user interfaces with several
591 widgets.
592
593 Qt 4.7 introduces the QStaticText class, which can be used to
594 improve text rendering performance. More info is available from
595 \l{http://labs.trolltech.com/blogs/2010/03/01/insanity-is-shaping-the-same-text-again-and-expecting-a-different-result/}{this blog}.
596
597 The QPainter class has a new API for rendering pixmap fragments
598 (QPainter::drawPixmapFragments), which can improve the rendering
599 performance of applications that need to render
600 \l{QPainter::drawPixmapFragments()}{pixmap fragments}.
601
602 Qt 4.7 has an updated version of the JavaScriptCore engine for the
603 QtScript module, which improves JavaScript execution performance.
604
605 \section1 New Classes, Functions, Macros, etc.
606
607 Links to new classes, elements, functions, macros, and other items
608 introduced in Qt 4.7.
609
610 \sincelist 4.7
611
612*/
613
614/*!
615 \page qt4-6-intro.html
616 \title What's New in Qt 4.6
617
618 Qt 4.6 provides many improvements and enhancements over the
619 previous releases in the Qt 4 series. This document covers the
620 most important features in this release, separated by category.
621
622\omit
623 A comprehensive list of changes between Qt 4.5 and Qt 4.6 is
624 included in the \c changes-4.6.0 file
625 \l{http://qt.nokia.com/developer/changes/changes-4.6.0}{available
626 online}. A \l{Known Issues in 4.7.3}{list of known issues}
627 for this release is also available.
628
629 Changes between this release and the previous release are provided
630 in the \c{changes-4.7.3} file (also
631 \l{http://qt.nokia.com/developer/changes/changes-4.7.3}{available online}).
632\endomit
633
634 A list of other Qt 4 features can be found on the \bold{\l{What's
635 New in Qt 4}} page.
636
637 \section1 Support for Symbian
638
639 Qt 4.6 is the first release to include support for the Symbian
640 platform, with integration into the S60 framework. The port to
641 Symbian and S60 provides all functionality required to develop
642 rich end-user applications for devices running S60 3.1 and
643 later.
644
645 See the \l{The Symbian platform - Introduction to Qt} for more information.
646
647 \section1 Animation Framework
648
649 The animation framework helps build highly animated,
650 high-performance GUIs without the hassle of managing complex
651 structures, timers, and easing curves, not to mention the large
652 state graphs that all animated GUIs tend to be full of.
653
654 The framework makes it easy to animate \l{QObject}s, including
655 QWidgets, by allowing Qt properties to be animated. It also allows
656 creating custom animations and interpolation functions. Graphics
657 views are not left out; one can animate \l{QGraphicsWidget}s and
658 new \l{QGraphicsObject}s which inherit from QGraphicsItem
659 (and thereby enable properties).
660
661 Animations are controlled using easing curves and can be grouped
662 together. This enables animations of arbitrary complexity.
663
664 The API is easy to grasp with functions such as start(), stop(),
665 pause(), and currentTime(). Here is an image from one of the
666 examples that come with the framework:
667
668 \image whatsnewanimatedtiles.png
669
670 The animation framework also plugs into the new Qt Statemachine by
671 allowing an animation to be played when transitions are triggered.
672 The state machine framework is introduced in 4.6 and is described
673 below.
674
675 See \l{The Animation Framework} documentation for more information.
676
677 \section1 State Machine Framework
678
679 The state machine framework provides a robust state chart
680 implementation based on Harel statecharts and SCXML. Qt's API lets
681 you construct such state graphs and execute them. The key benefits
682 of a state machine are:
683
684 \list
685 \o Simplify complex application semantics.
686 \o Use of states to reduce code bloat.
687 \o Use states to improve maintainability.
688 \o Makes event-driven programming robust and more
689 reusable.
690 \endlist
691
692 It is especially the last item here that makes using a state
693 machine worthwhile. A key characteristic of event-driven systems
694 (such as Qt applications) is that behavior often depends not only
695 on the last or current event, but also the events that preceded
696 it. With statecharts, this information is easy to express.
697
698 The framework fits neatly into Qt by allowing transitions to
699 trigger on signals and \l{QEvent}s. By inserting animations into
700 the state machine, it is also easier to use the framework for
701 animating GUIs, for instance.
702
703 See \l{The State Machine Framework} documentation for more information.
704
705 \section1 Touch and Gestures
706
707 Support for touch input enables users to interact with many
708 parts of a user interface at the same time, and provides the basis
709 for gestures. Additional infrastructure for gesture recognition
710 allows a sequence of touch inputs to be combined to create gestures
711 that can be used to activate features and trigger actions in an
712 application.
713
714 \image gestures.png
715
716 This new functionality brings a number of benefits:
717
718 \list
719 \o Allows users to interact with applications in more natural ways.
720 \o Simplifies finger-based interaction with UI components.
721 \o Combines support for common basic gestures and touch gestures
722 in a single general framework.
723 \o Enables extensibility by design.
724 \endlist
725
726 See the QTouchEvent class documentation for more information on touch
727 input and QGestureEvent for gestures.
728
729 \section1 DOM Access API
730
731 Web pages and XML both have very complex document object models.
732 The W3C selector API provides a very simple way to access and
733 manipulate such structures. This API makes it intuitive to access
734 DOM, helps reuse CSS selector knowledge, and gives little
735 maintenance or footprint overhead.
736
737 \snippet webkitsnippets/webelement/main.cpp FindAll
738
739 See the QWebElement class documentation for more information.
740
741 \section1 Performance Optimizations
742
743 As always, Qt continuously strive to optimize its performance.
744 For this release, we have:
745
746 \list
747 \o Rewritten the QGraphicsView rendering algorithm.
748 \o Made QPixmapCache support efficient Key data structure.
749 \o Reduced overhead in QNetworkAccessManager.
750 \o Added the QContiguousCache class, which provides efficient caching of
751 contiguous data.
752 \o Added support for hardware-accelerated rendering through
753 \l{OpenVG Rendering in Qt}{OpenVG}
754 \o Removed Win9x support.
755 \endlist
756
757 \section1 Graphics Effects
758
759 Effects can be used to alter the appearance of UI elements such as
760 \l{QGraphicsItem}s and \l{QWidget}s. A couple of standard effects such
761 as blurring, colorizing and drop shadow are provided, and it is
762 possible to implement custom effects.
763
764 \table
765 \row
766 \o{2,1} \img graphicseffect-plain.png
767 \row
768 \o \img graphicseffect-blur.png
769 \o \img graphicseffect-colorize.png
770 \row
771 \o \img graphicseffect-opacity.png
772 \o \img graphicseffect-drop-shadow.png
773 \endtable
774
775 See the QGraphicsEffect class documentation for more information.
776
777 \section1 XML Schema Validation
778
779 The QtXmlPatterns module can now be used to validate schemas, either
780 through C++ APIs in the Qt application, or using the xmlpatternsvalidator
781 command line utility. The implementation of XML Schema Validation supports
782 the specification version 1.0 in large parts.
783
784 \img xml-schema.png
785
786 See the \l{XML Processing} and QXmlSchema class documentation for more
787 information.
788
789 \section1 Qt3D Enablers
790
791 As more of Qt, and more of the applications built on Qt go 3D,
792 API's should be provided to simplify this. Mainly, the new API
793 aims to make it more easy to create 3D applications with OpenGL.
794 It will also unify the Qt OpenGL codebase, and enable
795 cross-platform 3D codebase.
796
797 The main features of the Qt3D enablers are currently: Math
798 primitives for matrix multiplication, vectors, quaternions
799 (client-side), and an API for vertex and fragment shaders, GLSL/ES.
800 Future research will, among other things include stencils,
801 scissors, vertex buffers and arrays, texture manipulation, and
802 geometry shaders.
803
804 \section1 Multimedia Services
805
806 Qt 4.6 comes with new classes for handling audio. These classes
807 provide low-level access to the system's audio system. By
808 specifying the audio format (QAudioFormat) and supplying audio
809 data through a QIODevice, you get direct access to the
810 functionality of the sound device. The API also comes with
811 functions to query audio devices for which audio formats they
812 support.
813
814 See the \l{QtMultimedia Module} documentation for more information.
815
816 \section1 New Classes, Functions, Macros, etc.
817
818 Links to new classes, functions, macros, and other items
819 introduced in Qt 4.6.
820
821 \sincelist 4.6
822
823*/
824
825/*
826 \page qt4-5-intro.html
827 \title What's New in Qt 4.5
828
829 Qt 4.5 provides many improvements and enhancements over the previous releases
830 in the Qt 4 series. This document covers the most important features in this
831 release, separated by category.
832
833 A comprehensive list of changes between Qt 4.4 and Qt 4.5 is included
834 in the \c changes-4.5.0 file
835 \l{http://qt.nokia.com/developer/changes/changes-4.5.0}{available online}.
836 A \l{Known Issues in 4.7.3}{list of known issues} for this release is also
837 available.
838
839 Changes between this release and the previous release are provided
840 in the \c{changes-4.7.3} file (also
841 \l{http://qt.nokia.com/developer/changes/changes-4.7.3}{available online}).
842
843 A list of other Qt 4 features can be found on the
844 \bold{\l{What's New in Qt 4}} page.
845
846 \section1 Qt WebKit Integration
847
848 \image webkit-netscape-plugin.png
849
850 The WebKit browser engine included with Qt has been upgraded to the latest
851 upstream (trunk) version of WebKit, bringing the latest features and
852 improvements to Qt applications. These include:
853
854 \list
855 \o Support for full page zooming, with appropriate rescaling of images and fonts.
856 \o The CSS-based transformation and animation features provided by a WebKit
857 extension.
858 \o Performance improvements due to faster JavaScript engine and optimized
859 page loading.
860 \endlist
861
862 Standards compatibility improvements include provision for the Netscape plugin
863 API, allowing most Netscape plugins to be used in-process, support for HTML 5
864 audio and video elements using Qt's Phonon integration, and
865 \l{Web Application Support}{facilities for client-side storage of Web content}.
866
867 \section1 Performance Improvements
868
869 The introduction of the QtBenchLib performance benchmarking library enables
870 performance benchmarking and regression testing. Core parts of Qt itself have
871 undergone focused re-engineering for improved graphics performance, including
872 paint engine and text rendering improvements, Graphics View and style sheet
873 performance improvements.
874
875 The X11 paint engine now uses XSHM (the X shared memory extension), resulting
876 in reduced overhead for painting operations.
877
878 A new OpenGL ES 2.0-based paint engine complements the existing OpenGL paint
879 engine, but with a focus on embedded devices.
880
881 Qt now features a pluggable graphics system, making it possible for users
882 and developers to select raster, OpenGL or native graphics systems to take
883 into account the specific needs of their applications and get the best
884 performance out of them.
885
886 \section1 Mac OS X Cocoa Support
887
888 \image mac-cocoa.png
889
890 Qt for Mac OS X has been substantially rewritten to use Apple's Cocoa API,
891 enabling Qt applications to be deployed on 64-bit Macintosh hardware.
892 In addition, the new QMacCocoaViewContainer and QMacNativeWidget classes
893 provide integration with Cocoa's own features and controls.
894
895 For many applications, a simple recompilation is all that is required
896 to produce an executable for 64-bit systems. Applications that use
897 specific features may require a few changes first.
898
899 \section1 Windows CE Feature Parity
900
901 Qt for Windows CE has been updated to bring features of Qt 4.4 and Qt 4.5
902 to the Windows CE platform, including:
903
904 \list
905 \o Phonon Multimedia Framework, using a Direct-Show based backend for audio
906 and video playback and a Simple WaveOut backend for devices without DirectShow.
907 \o The inclusion of Qt WebKit integration features previously unavailable for
908 Qt 4.4 on Windows CE.
909 \endlist
910
911 Support on all Windows CE platforms; recommended for WinCE 6 and higher.
912
913 The inclusion of these features enables developers to easily integrate Web and
914 multimedia content into Qt applications on Windows CE Standard Edition while
915 retaining full cross-platform compatibility with other Qt platforms.
916
917 \section1 XML Transformations with XSLT
918
919 The QtXmlPatterns module has been extended to cover XSLT, a transformation language
920 for XML documents. A common application of this is the transformation of XML data
921 into human-readable formats for reporting purposes.
922
923 XSLT makes it simple to reformat XML content without changing data structures,
924 removes the need for an intermediate DOM layer for presentation, and enables
925 rapid solutions to be created; for example, creating reports as HTML or PDF.
926
927 \section1 Qt Script Debugger
928
929 \image qtscript-debugger-small.png
930
931 Developers using Qt Script in their applications can take advantage of
932 the new \l{Qt Script Debugger Manual}{Qt Script Debugger} to provide
933 error reporting for scripts, and to let users track down bugs in their
934 own scripts.
935
936 Many standard features of GUI debugging tools are present, allowing the
937 developer to step through running script code, inspect variables,
938 automatically catch exceptions, and set conditional breakpoints.
939
940 \section1 OpenDocument File Format Support
941
942 Qt 4.5 includes support for writing rich text documents as OpenDocument files via
943 the newly-introduced QTextDocumentWriter class. This provides an generic mechanism
944 for file export that can be used to introduce support for additional formats in
945 future releases.
946
947 \section1 Improved Network Proxy Support
948
949 Qt's networking classes have been updated with
950 \l{QtNetwork Module#Support for Network Proxies}{improved proxy support}.
951 This includes improved integration with system proxy settings and the added
952 ability to handle non-trivial proxy cases.
953
954 \section1 Qt Designer Improvements
955
956 \image designer-screenshot-small.png
957
958 Qt Designer 4.5 boasts some improvements on usability, for example:
959
960 \list
961 \o \bold{Icon Mode} for the widget box which substantially reduces
962 scrolling.
963 \o \bold{Morphing Widgets} which lets you morph similar widget types,
964 e.g., a QWidget to a QFrame, types via the context menu's
965 \e{Morph into} entry.
966 \o \bold{Filters} for the \gui{Property Editor} that lets you find
967 properties or widgets quickly.
968 \o \bold{Find option} for the \gui{Object Inspector} that performs an
969 incremental search on the form's widgets. Also, the objects' layout
970 state is displayed here with using an icon on the left. Broken
971 layouts are represented with the same icon used for the
972 \e{Break Layout} action.
973 \endlist
974
975 In addition, Qt Designer now features an \gui{Embedded Design} tab that can
976 be found in the \gui Preferences dialog. Within this tab, you can define
977 embedded device profiles. These profiles contains screen settings, e.g.,
978 display resolution, default font and default style. Qt Designer will use
979 these settings when you edit forms.
980
981 More information about these improvements can be found in the
982 \l{What's New in Qt Designer 4.5} overview.
983
984 \section1 Qt Linguist Improvements
985
986 Qt Linguist can now load and edit multiple translation files simultaneously.
987
988 Support for XML Localization Interchange File Format (XLIFF) files, previously added
989 to the \c lupdate tool in Qt 4.3, has been improved and extended to the rest of the
990 Qt Linguist toolchain. This enables files stored in Qt's TS translation format to
991 be exported for use with other tools.
992
993 The GNU Gettext PO format, which is commonly used in Open Source projects,
994 is now supported by Qt Linguist.
995
996 Support for a new way to annotate messages, using comments in the source code,
997 has been added to the toolchain. See the QObject::tr() documentation for a detailed
998 description and examples.
999
1000 The new \c lconvert filter tool facilitates conversion between file formats and
1001 can be used to perform other transformations on collections of translatable strings.
1002
1003 \section1 Graphics Enhancements
1004
1005 In addition to the performance improvements in this release, a number of graphics
1006 enhancements extend support for existing features to more platforms and expand Qt's
1007 core set of features with successful add-ons.
1008
1009 Widget style sheets can now be used on Mac OS X, making this approach to theming
1010 and styling viable for truly cross-platform applications.
1011
1012 Support for ARGB top-level widgets, previously available as a separate solution,
1013 is now provided as an integral part of Qt. This makes it possible to create windows
1014 with translucent regions on systems with the appropriate support from the user's
1015 window system. See the \l{QWidget#Creating Translucent Windows}{Creating Translucent
1016 Windows} section of the QWidget documentation for details of this feature.
1017
1018
1019 \image gtk-style-screenshot.png
1020
1021 Improved GTK+ integration provided by the QGtkStyle class improves the look and feel
1022 of Qt applications in GNOME and other GTK-based environments. The screenshot above
1023 illustrates this clearly.
1024*/
Note: See TracBrowser for help on using the repository browser.