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