1Qt 3.0 adds a lot of new features and improvements over the Qt 2.x 2series. Some internals have undergone major redesign and new classes 3and methods have been added. 4 5We have tried to keep the API of Qt 3.0 as compatible as possible with 6the Qt 2.x series. For most applications only minor changes will be 7needed to compile and run them successfully using Qt 3.0. 8 9One of the major new features that has been added in the 3.0 release 10is a module allowing you to easily work with databases. The API is 11platform independent and database neutral. This module is seamlessly 12integrated into Qt Designer, greatly simplifying the process of 13building database applications and using data aware widgets. 14 15Other major new features include a component architecture allowing you 16to build cross platform components, 'plugins' with Qt. You can use 17your own and third party plugins your own applications. The Unicode 18support of Qt 2.x has been greatly enhanced, it now includes full 19support for scripts written from right to left (e.g. Arabic and 20Hebrew) and also provides improved support for Asian languages. 21 22Many new classes have been added to the Qt Library. Amongst them are 23classes that provide a docking architecture (QDockArea/QDockWindow), a 24powerful rich text editor (QTextEdit), a class to store and access 25application settings (QSettings) and a class to create and communicate 26with processes (QProcess). 27 28Apart from the changes in the library itself a lot has been done to 29make the development of Qt applications with Qt 3.0 even easier than 30before. Two new applications have been added: Qt Linguist is a tool to 31help you translate your application into different languages; Qt 32Assistant is an easy to use help browser for the Qt documentation that 33supports bookmarks and can search by keyword. 34 35Another change concerns the Qt build system, which has been reworked 36to make it a lot easier to port Qt to new platforms. You can use this 37platform independent build system for your own applications. 38 39 40The Qt Library 41======================================== 42 43A large number of new features has been added to Qt 3.0. The following 44list gives an overview of the most important new and changed aspects 45of the Qt library. A full list of every new method follows the 46overview. 47 48 49Database support 50---------------- 51 52One of the major new features in Qt 3.0 is the SQL module that 53provides cross-platform access to SQL databases, making database 54application programming with Qt seamless and portable. The API, built 55with standard SQL, is database-neutral and software development is 56independent of the underlying database. 57 58A collection of tightly focused C++ classes are provided to give the 59programmer direct access to SQL databases. Developers can send raw SQL 60to the database server or have the Qt SQL classes generate SQL queries 61automatically. Drivers for Oracle, PostgreSQL, MySQL and ODBC are 62available and writing new drivers is straightforward. 63 64Tying the results of SQL queries to GUI components is fully supported 65by Qt's SQL widgets. These classes include a tabular data widget 66(for spreadsheet-like data presentation with in-place editing), a 67form-based data browser (which provides data navigation and edit 68functions) and a form-based data viewer (which provides read-only 69forms). This framework can be extended by using custom field editors, 70allowing for example, a data table to use custom widgets for in-place 71editing. The SQL module fully supports Qt's signal/slots mechanism, 72making it easy for developers to include their own data validation and 73auditing code. 74 75Qt Designer fully supports Qt's SQL module. All SQL widgets can be 76laid out within Qt Designer, and relationships can be established 77between controls visually. Many interactions can be defined purely in 78terms of Qt's signals/slots mechanism directly in Qt Designer. 79 80 81Component model - plugins 82------------------------- 83 84The QLibrary class provides a platform independent wrapper for runtime 85loading of shared libraries. Access to the shared libraries uses a 86COM-like interface. QPluginManager makes it trivial to implement 87plugin support in applications. The Qt library is able to load 88additional styles, database drivers and text codecs from plugins which 89implement the relevant interfaces, e.g. QStyleFactoryInterface, 90QSqlDriverInterface or QTextCodecInterface. It is possible to remove 91unused components from the Qt library, and easy to extend any 92application with 3rd party styles, database drivers or text codecs. 93 94Qt Designer supports custom widgets in plugins, and will use the 95widgets both when designing and previewing forms. 96 97QComponentFactory makes it easy to register any kind of component in a 98global database (e.g. the Windows Registry) and to use any registered 99component. 100 101 102Rich text engine and editor 103--------------------------- 104 105The rich text engine originally introduced in Qt 2.0 has been further 106optimized and extended to support editing. It allows editing formatted 107text with different fonts, colors, paragraph styles, tables and 108images. The editor supports different word wrap modes, command-based 109undo/redo, multiple selections, drag and drop, and many other 110features. The engine is highly optimized for proccesing and displaying 111large documents quickly and efficiently. 112 113 114Unicode 115------- 116 117Apart from the rich text engine, another new feature of Qt 3.0 that 118relates to text handling is the greatly improved Unicode support. Qt 1193.0 includes an implementation of the bidirectional algorithm (BiDi) 120as defined in the Unicode standard and a shaping engine for Arabic, 121which gives full native language support to Arabic and Hebrew speaking 122people. At the same time the support for Asian languages has been 123greatly enhanced. 124 125The support is almost transparent for the developer using Qt to 126develop their applications. This means that developers who developed 127applications using Qt 2.x will automatically gain the full support for 128these languages when switching to Qt 3.0. Developers can rely on their 129application to work for people using writing systems different from 130Latin1, without having to worry about the complexities involved with 131these scripts, as Qt takes care of this automatically. 132 133 134Docked and Floating Windows 135--------------------------- 136 137Qt 3.0 introduces the concept of Dock Windows and Dock Areas. Dock 138windows are widgets, that can be attached to, and detached from, dock 139areas. The commonest kind of dock window is a tool bar. Any number of 140dock windows may be placed in a dock area. A main window can have dock 141areas, for example, QMainWindow provides four dock areas (top, left, 142bottom, right) by default. The user can freely move dock windows and 143place them at a convenient place in a dock area, or drag them out of 144the application and have them float freely as top level windows in 145their own right. Dock windows can also be minimized or hidden. 146 147For developers, dock windows behave just like ordinary widgets. QToolbar 148for example is now a specialized subclass of a dock window. The API 149of QMainWindow and QToolBar is source compatible with Qt 2.x, so 150existing code which uses these classes will continue to work. 151 152 153Regular Expressions 154------------------- 155 156Qt has always provided regular expression support, but that support 157was pretty much limited to what was required in common GUI control 158elements such as file dialogs. Qt 3.0 introduces a new regular 159expression engine that supports most of Perl's regex features and is 160Unicode based. The most useful additions are support for parentheses 161(capturing and non-capturing) and backreferences. 162 163 164Storing application settings 165---------------------------- 166 167Most programs will need to store some settings between runs, for 168example, user selected fonts, colors and other preferences, or a list 169of recently used files. The new QSettings class provides a platform 170independent way to achieve this goal. The API makes it easy to store 171and retrieve most of the basic data types used in Qt (such as basic 172C++ types, strings, lists, colors, etc). The class uses the registry 173on the Windows platform and traditional resource files on Unix. 174 175 176Creating and controlling other processes 177---------------------------------------- 178 179QProcess is a class that allows you to start other programs from 180within a Qt application in a platform independent manner. It gives you 181full control over the started program, for example you can redirect 182the input and output of console applications. 183 184 185Accessibility (not part of the beta1 release) 186--------------------------------------------- 187 188Accessibility means making software usable and accessible to a wide 189range of users, including those with disabilities. In Qt 3.0, most 190widgets provide accessibility information for assistive tools that can 191be used by a wide range of disabled users. Qt standard widgets like 192buttons or range controls are fully supported. Support for complex 193widgets, like e.g. QListView, is in development. Existing applications 194that make use of standard widgets will become accessible just by using 195Qt 3.0. 196 197Qt uses the Active Accessibility infrastructure on Windows, and needs 198the MSAA SDK, which is part of most platform SDKs. With improving 199standardization of accessibility on other platforms, Qt will support 200assistive technologies on other systems, too. 201 202The accessibility API in Qt is not yet stable, which is why we decided 203not to make it a part of the beta1 release. 204 205 206XML Improvements 207---------------- 208 209The XML framework introduced in Qt 2.2 has been vastly improved. Qt 2102.2 already supported level 1 of the Document Object Model (DOM), a 211W3C standard for accessing and modifying XML documents. Qt 3.0 has 212added support for DOM Level 2 and XML namespaces. 213 214The XML parser has been extended to allow incremental parsing of XML 215documents. This allows you to start parsing the document directly 216after the first parts of the data have arrived, and to continue 217whenever new data is available. This is especially useful if the XML 218document is read from a slow source, e.g. over the network, as it 219allows the application to start working on the data at a very early 220stage. 221 222 223SVG support 224----------- 225 226SVG is a W3C standard for "Scalable Vector Graphics". Qt 3.0's SVG 227support means that QPicture can optionally generate and import static 228SVG documents. All the SVG features that have an equivalent in 229QPainter are supported. 230 231 232Multihead support 233----------------- 234 235Many professional applications, such as DTP and CAD software, are able 236to display data on two or more monitors. In Qt 3.0 the QDesktopWidget 237class provides the application with runtime information about the 238number and geometry of the desktops on the different monitors and such 239allows applications to efficiently use a multi-monitor setup. 240 241The virtual desktop of Windows 98 and 2000 is supported, as well as 242the traditional multi-screen and the newer Xinerama multihead setups 243on X11. 244 245 246X11 specific enhancements 247------------------------- 248 249Qt 3.0 now complies with the NET WM Specification, recently adopted 250by KDE 2.0. This allows easy integration and proper execution with 251desktop environments that support the NET WM specification. 252 253The font handling on X11 has undergone major changes. QFont no longer 254has a one-to-one relation with window system fonts. QFont is now a 255logical font that can load multiple window system fonts to simplify 256Unicode text display. This completely removes the burden of 257changing/setting fonts for a specific locale/language from the 258programmer. For end-users, any font can be used in any locale. For 259example, a user in Norway will be able to see Korean text without 260having to set their locale to Korean. 261 262Qt 3.0 also supports the new render extension recently added to 263XFree86. This adds support for anti aliased text and pixmaps with 264alpha channel (semi transparency) on the systems that support the 265rendering extension (at the moment XFree 4.0.3 and later). 266 267 268Printing 269-------- 270 271Printing support has been enhanced on all platforms. The QPrinter 272class now supports setting a virtual resolution for the painting 273process. This makes WYSIWYG printing trivial, and also allows you to 274take full advantage of the high resolution of a printer when painting 275on it. 276 277The postscript driver built into Qt and used on Unix has been greatly 278enhanced. It supports the embedding of true/open type and type1 fonts 279into the document, and can correctly handle and display Unicode. 280Support for fonts built into the printer has been enhanced and Qt now 281knows about the most common printer fonts used for Asian languages. 282 283 284QHttp 285----- 286 287This class provides a simple interface for HTTP downloads and uploads. 288 289 290Compatibility with the Standard Template Library (STL) 291------------------------------------------------------ 292 293Support for the C++ Standard Template Library has been added to the Qt 294Template Library (QTL). The QTL classes now contain appropriate copy 295constructors and typedefs so that they can be freely mixed with other 296STL containers and algorithms. In addition, new member functions have 297been added to QTL template classes which correspond to STL-style 298naming conventions (e.g., push_back()). 299 300 301Qt Designer 302======================================== 303 304Qt Designer was a pure dialog editor in Qt 2.2 but has now been 305extended to provide the full functionality of a GUI design tool. 306 307This includes the ability to lay out main windows with menus and 308toolbars. Actions can be edited within Qt Designer and then plugged 309into toolbars and menu bars via drag and drop. Splitters can now be 310used in a way similar to layouts to group widgets horizontally or 311vertically. 312 313In Qt 2.2, many of the dialogs created by Qt Designer had to be 314subclassed to implement functionality beyond the predefined signal and 315slot connections. Whilst the subclassing approach is still fully supported, 316Qt Designer now offers an alternative: a plugin for editing 317slots. The editor offers features such as syntax highlighting, 318completion, parentheses matching and incremental search. 319 320The functionality of Qt Designer can now be extended via plugins. 321Using Qt Designer's interface or by implementing one of the provided 322interfaces in a plugin, a two way communication between plugin and Qt 323Designer can be established. This functionality is used to implement 324plugins for custom widgets, so that they can be used as real widgets 325inside the designer. 326 327Basic support for project management has been added. This allows you 328to read and edit *.pro files, add and remove files to/from the project 329and do some global operations on the project. You can now open the 330project file and have one-click access to all the *.ui forms in the 331project. 332 333In addition to generating code via uic, Qt Designer now supports the 334dynamic creation of widgets directly from XML user interface 335description files (*.ui files) at runtime. This eliminates the need of 336recompiling your application when the GUI changes, and could be used 337to enable your customers to do their own customizations. Technically, 338the feature is provided by a new class, QWidgetFactory in the 339QResource library. 340 341 342Qt Linguist 343======================================== 344 345Qt Linguist is a GUI utility to support translating the user-visible 346text in applications written with Qt. It comes with two command-line 347tools: lupdate and lrelease. 348 349Translation of a Qt application is a three-step process: 350 351 1) Run lupdate to extract user-visible text from the C++ source 352 code of the Qt application, resulting in a translation source file 353 (a *.ts file). 354 2) Provide translations for the source texts in the *.ts file using 355 Qt Linguist. 356 3) Run lrelease to obtain a light-weight message file (a *.qm file) 357 from the *.ts file, which provides very fast lookup for released 358 applications. 359 360Qt Linguist is a tool suitable for use by translators. Each 361user-visible (source) text is characterized by the text itself, a 362context (usually the name of the C++ class containing the text), and 363an optional comment to help the translator. The C++ class name will 364usually be the name of the relevant dialog, and the comment will often 365contain instructions that describe how to navigate to the relevant 366dialog. 367 368You can create phrase books for Qt Linguist to provide common 369translations to help ensure consistency and to speed up the 370translation process. Whenever a translator navigates to a new text to 371translate, Qt Linguist uses an intelligent algorithm to provide a list 372of possible translations: the list is composed of relevant text from 373any open phrase books and also from identical or similar text that has 374already been translated. 375 376Once a translation is complete it can be marked as "done"; such 377translations are included in the *.qm file. Text that has not been 378"done" is included in the *.qm file in its original form. Although Qt 379Linguist is a GUI application with dock windows and mouse control, 380toolbars, etc., it has a full set of keyboard shortcuts to make 381translation as fast and efficient as possible. 382 383When the Qt application that you're developing evolves (e.g. from 384version 1.0 to version 1.1), the utility lupdate merges the source 385texts from the new version with the previous translation source file, 386reusing existing translations. In some typical cases, lupdate may 387suggest translations. These translations are marked as unfinished, so 388you can easily find and check them. 389 390 391Qt Assistant 392======================================== 393 394Due to the positive feedback we received about the help system built 395into Qt Designer, we decided to offer this part as a separate 396application called Qt Assistant. Qt Assistant can be used to browse 397the Qt class documentation as well as the manuals for Qt Designer and 398Qt Linguist. It offers index searching, a contents overview, bookmarks 399history and incremental search. Qt Assistant is used by both Qt 400Designer and Qt Linguist for browsing their help documentation. 401 402 403QMake 404======================================== 405 406To ease portability we now provide the qmake utility to replace tmake. 407QMake is a C++ version of tmake which offers additional functionallity 408that is difficult to reproduce in tmake. Qt uses qmake in its 409build system and we have released it as free software. 410 411 412Qt Functions 413======================================== 414 415QAction 416------- 417 418All new functions: 419 void addedTo( QWidget *actionWidget, QWidget *container ); 420 void addedTo( int index, QPopupMenu *menu ); 421 422QActionGroup 423------------ 424 425New mode "uses drop down", where members are shown in a separate 426subwidget such as a combobox or a submenu (enable with 427setUsesDropDown(TRUE) ) 428 429All new functions: 430 void add(QAction*); 431 void addSeparator(); 432 void addedTo( QWidget *actionWidget, QWidget *container, QAction *a ); 433 void addedTo( int index, QPopupMenu *menu, QAction *a ); 434 void setUsesDropDown( bool enable ); 435 bool usesDropDown() const; 436 437 438QApplication 439------------ 440 441Added the setStyle(const QString&) overload that takes the name of the 442style as its argument. This loads a style plugin via a QStyleFactory. 443 444desktop() now returns a QDesktopWidget that provides access to 445multi-head information. Prior to 3.0, it returned a normal QWidget. 446 447New functions to define the library search path for plugins 448(setLibraryPaths, ...). 449 450New functions to define reverse layout for bidirectional languages 451(setReverseLayout, ...). 452 453All new functions: 454 bool hasPendingEvents() 455 456 void setLibraryPaths(const QStringList &); 457 QStringList libraryPaths(); 458 void addLibraryPath(const QString &); 459 void removeLibraryPath(const QString &); 460 461 void setReverseLayout( bool b ); 462 bool reverseLayout(); 463 int horizontalAlignment( int align ); 464 465 466 467QClipboard 468---------- 469 470On systems that support it, for example X11, QClipboard now 471differentiates between the primary selection and the data in the clipboard. 472 473All new functions: 474 bool supportsSelection() const; 475 bool ownsClipboard() const; 476 void setSelectionMode(bool enable); 477 bool selectionModeEnabled() const; 478New signals: 479 void selectionChanged() 480 481 482 483QCursor 484------- 485 486Now inherits Qt namespace. Enum values like ArrowCursor, 487UpArrowCursor, CrossCursor etc. are now part of that namespace. 488 489 490QDataStream 491----------- 492 493Added missing operators for Q_LONG and Q_ULONG 494 495 496QDateTime / QDate / QTime 497------------------------- 498 499More sophisticated toString() function that takes a DateFormat, where 500DateFormat can be either TextDate (the default), ISODate (ISO 8601) or 501LocalDate (locale dependent). 502 503All new functions: 504 QDate addMonths( int months ) const; 505 QDate addYears( int years ) const; 506 QDate fromString( const QString& s, Qt::DateFormat f = Qt::TextDate ); 507 static QString shortMonthName( int month ); 508 static QString longMonthName( int month ); 509 static QString shortDayName( int weekday ); 510 static QString longDayName( int weekday ); 511 static void setShortMonthNames( const QStringList& names ); 512 static void setLongMonthNames( const QStringList& names ); 513 static void setShortDayNames( const QStringList& names ); 514 static void setLongDayNames( const QStringList& names ); 515 516QDialog 517------- 518 519Merged with QSemiModal. Calling show() on a modal dialog will return 520immediately, not enter a local event loop. Showing a modal dialog in 521its own event loop is achieved using exec(). 522 523exec() is now a public slot. 524 525Usability: For widgets supporting What's This help, QDialog 526automatically offers a context menu containing a "What's This?" entry. 527 528 529QEvent 530------ 531 532Mouse events are now propagated up to the toplevel widget if no widget 533accepts them and no event filter filters them out. In previous Qt 534versions, only key events were propagated. 535 536All events carry a flag 'spontaneous' to determine whether the even 537came from the outside or was generated by code within the 538applications. Previously, only show and hide events had this flag. 539 540Enter/Leave event generation has been fixed. Previously, a widget 541received a leave event when the mouse pointer entered one of its 542children. This was both unnatural and contradictive to the 543documentation. 544 545QWheelevent now carries an orientation to differentiate between 546horizontal and vertical wheels. 547 548QFocusEvent: new reason 'Backtab' (previously only 'Tab' was 549available). This makes it possible to discover from what direction on 550the tab-focus chain the widget was entered. 551 552New events: QContextMenuEvent, QIMEvent 553 554 555QFile 556----- 557 558Ported from int to Q_LONG to prepare for large file sizes on 64 bit 559systems. 560 561Filter handling made more flexible. 562 563 564QFileDialog 565----------- 566 567All new Functions: 568 void setSelectedFilter( const QString& ); 569 void setSelectedFilter( int ); 570New signals: 571 void filesSelected( const QStringList& ); 572 void filterSelected( const QString& ); 573 574If you try to specify an invalid file when using getOpenFileName(s), an error message 575will appear and the file will not be accepted. In 2.x, this function behaved differently 576because users were using getOpenFileName(s) as a Save File Dialog; you should use 577getSaveFileName() when you require a Save File Dialog. 578 579 580QCanvas Module 581-------------- 582 583 New classes: 584 QCanvasSpline - a multi-bezier spline 585 586 QCanvasItemList 587 void update(); 588 589 QCanvas: 590 QRect rect() const; 591 void setUnchanged( const QRect& area ); 592 void drawArea(const QRect&, QPainter* p, bool double_buffer); 593 void drawViewArea( QCanvasView* view, QPainter* p, const QRect& r, bool dbuf ); 594 QRect changeBounds(const QRect& inarea); 595 596 QCanvasView: 597 const QWMatrix &worldMatrix() const; 598 const QWMatrix &inverseWorldMatrix() const; 599 void setWorldMatrix( const QWMatrix & ); 600 QCanvasSprite: 601 int leftEdge() const; 602 int topEdge() const; 603 int rightEdge() const; 604 int bottomEdge() const; 605 int leftEdge(int nx) const; 606 int topEdge(int ny) const; 607 int rightEdge(int nx) const; 608 int bottomEdge(int ny) const; 609 610QCanvasSprite can now be set to animate its frames without the need to 611subclass. 612 613 614QFont, QFontDatabase, QFontInfo, QFontMetrics 615--------------------------------------------- 616 617The QFont::CharSet enum has been removed and replaced with the 618QFont::Script enum. With this change, a QFont is not associated with a 619specific character set. Instead, QFont uses Unicode Scripts for 620loading fonts. On platforms where most fonts do not use the Unicode 621encoding (currently only X11), multiple locale and character-set 622dependent fonts can be loaded for the individual Unicode Scripts. 623 624Another new feature of QFont is a much more flexible substitution 625mechanism. Each family can have a list of appropriate substitutes. The 626font substitution feature allows you to specify a list of substitute 627fonts. Substitute fonts are used when a font cannot be loaded, or if 628the specified font doesn't have a particular character (X11 only). 629 630For example (on X11), you select the font Lucida, which doesn't have 631Korean characters. For Korean text, you want to use the Mincho font 632family. By adding Mincho to the list, any Korean characters not found 633in Lucida will be used from Mincho. Because the font substitutions are 634lists, you can also select multiple families, such as Song Ti (for use 635with Chinese text). 636 637QFontInfo and QFontMetrics had small API changes related to the 638disappearance of QFont::CharSet. In terms of functionality, the 639behavior of these classes is unchanged. 640 641QFontDatabase had several API cleanups related to the disappearance of 642QFont::CharSet. Most QFontDatabase member functions take one less 643argument, yet compatibility functions still exist to keep old source 644code working. 645 646Family and style names returned from QFontDatabase are now processed 647and formatted in a way that is suitable for display to users. Family 648and foundry names are capitalized and foundry names are enclosed in 649square brackets after the family name. For example, the Helvetica 650font family might have 3 different foundries: Adobe, Cronyx and 651Phaisarn. In 2.x, QFontDatabase listed them like this: 652 653 adobe-helvetica 654 cronyx-helvetica 655 phaisarn-helvetica 656 657Starting with 3.0, QFontDatabase lists them like this: 658 659 Helvetica [Adobe] 660 Helvetica [Cronyx] 661 Helvetica [Phaisarn] 662 663 664QFrame 665------ 666 667Two new frame shapes for more sophisticated style features: 668MenuBarPanel and ToolBarPanel. 669 670 671QGrid 672----- 673 674The member type 675 676 enum Direction { Horizontal, Vertical }; 677 678has been eliminated, as it is redundant: use Qt::Orientation instead. 679Old code referring to QGrid::Horizontal or QGrid::Vertical will still 680work, as QGrid counts Qt among its ancestors. 681 682 683QGroupBox 684--------- 685 686More functionality of the built-in layout is exposed: 687 688 int insideMargin() const; 689 int insideSpacing() const; 690 void setInsideMargin( int m ); 691 void setInsideSpacing( int s ); 692 693 694QHeader 695------- 696 697New property: bool stretching 698 699New functions: 700 bool isStretchEnabled( int section ); 701 void setStretchEnabled( bool b, int section ); 702 703 704QIconSet 705-------- 706 707In addition to the mode - which can be either Normal, Disabled or 708Active - QIconSet now supports different pixmaps for a state, i.e. On 709or Off. The functions pixmap() and setPixmap() have been extended 710accordingly. 711 712The default constructor no longer initializes the iconset to 713contain a null pixmap. QIconSet::isNull() returns TRUE for un- 714initialized iconsets, and pixmap() still returns a null pixmap for 715pixmaps that couldn't be generated. 716 717 718QIconView 719--------- 720 721Extended findItem() to support ComparisonFlags. Support for 722soft-hyphens when doing word wrap. 723 724New signal: 725 contextMenuRequested( QIconViewItem*, const QPoint& pos); 726 727 728QIconViewItem 729------------- 730 731Added support for explicit rtti. 732 733New function: 734 int rtti() const; 735 736 737 738QListBox 739-------- 740 741Extended findItem() to support ComparisonFlags. 742 743New signal: 744 void contextMenu( QListBoxItem *, const QPoint & ); 745 746 747QListBoxItem 748------------ 749 750Added support for explicit rtti. 751 752New function: 753 int rtti() const; 754 755 756 757QListView 758--------- 759 760It was never really hard to implement drag and drop with QListView, 761but since many applications demand this functionality today, we 762decided to add it to the listview itself. 763 764In addition, in-place editing and per-item tooltips have been added. 765Extended findItem() to support ComparisonFlags 766 767New properties: 768 bool showToolTips 769 ResizeMode resizeMode 770 771New signals: 772 contextMenuRequested( QIconViewItem*, const QPoint& pos); 773 void dropped( QDropEvent *e ); 774 void itemRenamed( QListViewItem *item, int col, const QString & ); 775 void itemRenamed( QListViewItem *item, int col ); 776 777New functions: 778 void setResizeMode( ResizeMode m ); 779 ResizeMode resizeMode() const; 780 QDragObject *dragObject(); 781 void startDrag(); 782 void startRename(); 783 784 785QListViewItem 786------------- 787 788Added support for explicit rtti. 789 790New functions: 791 void setDragEnabled( bool allow ); 792 void setDropEnabled( bool allow ); 793 bool dragEnabled() const; 794 bool dropEnabled() const; 795 bool acceptDrop( const QMimeSource *mime ) const; 796 void setVisible( bool b ); 797 bool isVisible() const; 798 void setRenameEnabled( int col, bool b ); 799 bool renameEnabled( int col ) const; 800 void startRename( int col ); 801 void setEnabled( bool b ); 802 bool isEnabled() const; 803 int rtti() const; 804 805 void dropped( QDropEvent *e ); 806 void dragEntered(); 807 void dragLeft(); 808 void okRename( int col ); 809 void cancelRename( int col ); 810 811 812QLabel 813------ 814 815In addition to text, rich text, pixmaps and movies, QLabel can now 816display QPicture vector graphics. 817 818New functions: 819 820 QPicture *picture() const; 821 void setPicture( const QPicture & ); 822 823 824QLineEdit 825--------- 826 827New property: bool dragEnabled 828 829New signal: 830 contextMenuRequested( QIconViewItem*, const QPoint& pos); 831 832New functions: 833 void cursorForward( bool mark, int steps = 1 ); 834 void cursorBackward( bool mark, int steps = 1 ); 835 void cursorWordForward( bool mark ); 836 void cursorWordBackward( bool mark ); 837 bool dragEnabled(); 838 void setDragEnabled( bool b ); 839 840 841QMainWindow 842----------- 843 844Added a dock window architecture. Previous versions of QMainWindow 845could only deal with toolbars, now they handle generalized dock 846windows. QToolBar inherits QDockWindow. 847 848 849New property: 850 bool dockWindowsMovable; 851 852New signals: 853 void dockWindowPositionChanged( QDockWindow * ); 854 855New functions: 856 void setDockEnabled( Dock dock, bool enable ); 857 bool isDockEnabled( Dock dock ) const; 858 bool isDockEnabled( QDockArea *area ) const; 859 void setDockEnabled( QDockWindow *tb, Dock dock, bool enable ); 860 bool isDockEnabled( QDockWindow *tb, Dock dock ) const; 861 bool isDockEnabled( QDockWindow *tb, QDockArea *area ) const; 862 863 void addDockWindow( QDockWindow *, Dock = Top, bool newLine = FALSE ); 864 void addDockWindow( QDockWindow *, const QString &label, Dock = Top, bool newLine = FALSE ); 865 void moveDockWindow( QDockWindow *, Dock = Top ); 866 void moveDockWindow( QDockWindow *, Dock, bool nl, int index, int extraOffset = -1 ); 867 void removeDockWindow( QDockWindow * ); 868 869 QDockArea *dockingArea( const QPoint &p ); 870 QDockArea *leftDock() const; 871 QDockArea *rightDock() const; 872 QDockArea *topDock() const; 873 QDockArea *bottomDock() const; 874 875 bool isCustomizable() const; 876 bool appropriate( QDockWindow *dw ) const; 877 QPopupMenu *createDockWindowMenu( DockWindows dockWindows = AllDockWindows ) const; 878 879 bool showDockMenu( const QPoint &globalPos ); 880 881 882QMetaObject 883----------- 884 885###TODO 886 887 888QMimeSourceFactory 889------------------ 890 891New static functions: 892 QMimeSourceFactory* takeDefaultFactory(); 893 static void addFactory( QMimeSourceFactory *f ); 894 895 896QNetworkProtocol 897---------------- 898 899Spelling fix in Error::ErrListChildren enum. 900 901 902QRegExp 903------- 904 905QRegExp now has a more complete regular expression engine similar to 906Perl's, with full Unicode and backreference support. 907 908New functions: 909 bool minimal() const; 910 void setMinimal( bool minimal ); 911 bool exactMatch( const QString& str ); 912 bool exactMatch( const QString& str ) const; 913 int search( const QString& str, int start = 0 ); 914 int search( const QString& str, int start = 0 ) const; 915 int searchRev( const QString& str, int start = -1 ); 916 int searchRev( const QString& str, int start = -1 ) const; 917 int matchedLength(); 918 QStringList capturedTexts(); 919 QString cap( int nth = 0 ); 920 int pos( int nth = 0 ); 921 922 923QSessionManager 924--------------- 925 926Renamed the misnamed setProperty() overloads to setManagerProperty() 927to resolve the conflict with the now virtual QObject::setProperty(). 928 929 930QString 931------- 932 933New functions: 934 bool endsWith( const QString & ); 935 int similarityWith( const QString & ); 936 937### TODO 938 939QStyle 940------ 941 942### TODO 943 944QTabBar 945------- 946 947The extended QTabWidget support in Qt Designer made two more 948functions handy to have: 949 QTab * tabAt( int ) const; 950 int indexOf( int ) const; 951 952 953 954QToolBar 955-------- 956 957Inherits QDockWindow now, previously only QWidget. 958 959 960QToolButton 961----------- 962 963New property: 964 QIconSet iconSet 965 966New functions: 967 QIconSet iconSet() const; 968 virtual void setIconSet( const QIconSet & ); 969 970QWidget 971------- 972 973New functions: 974 975 const QColor & eraseColor() const; 976 virtual void setEraseColor( const QColor & ); 977 const QPixmap * erasePixmap() const; 978 virtual void setErasePixmap( const QPixmap & ); 979 980 981 982QWizard 983------- 984 985New property: QString titleFont 986 987New functions: 988 QFont titleFont() const; 989 void setTitleFont( const QFont & ); 990 int indexOf( QWidget* ) const; 991 992 993QWMatrix 994-------- 995 996New function: 997 bool isIdentity() const; 998 999 1000QGL Module 1001---------- 1002 1003QGLWidget 1004New functions: 1005 QGLFormat requestedFormat() const; 1006 QImage grabFrameBuffer( bool withAlpha = FALSE ); 1007 1008 1009QWorkspace Module 1010----------------- 1011 1012A new property scrollBarsEnabled makes it possible to add on-demand 1013scrollbars to the workspace. We define this property in Qt Designer to 1014make designing forms larger than the available space on the desktop 1015more comfortable. 1016 1017New property: 1018 bool scrollBarsEnabled 1019 1020 1021QXML Module 1022----------- 1023Many new functions have been added: 1024 QDomImplementation 1025 QDomDocumentType createDocumentType( const QString& qName, const QString& publicId, const QString& systemId ); 1026 QDomDocument createDocument( const QString& nsURI, const QString& qName, const QDomDocumentType& doctype ); 1027 QDomNode 1028 QDomNode insertBefore( const QDomNode& newChild, const QDomNode& refChild ); 1029 QDomNode insertAfter( const QDomNode& newChild, const QDomNode& refChild ); 1030 QDomNode replaceChild( const QDomNode& newChild, const QDomNode& oldChild ); 1031 QDomNode removeChild( const QDomNode& oldChild ); 1032 QDomNode appendChild( const QDomNode& newChild ); 1033 bool hasChildNodes() const; 1034 QDomNode cloneNode( bool deep = TRUE ) const; 1035 void normalize(); 1036 bool isSupported( const QString& feature, const QString& version ) const; 1037 QString namespaceURI() const; 1038 QString localName() const; 1039 bool hasAttributes() const; 1040 QDomDocument 1041 bool setContent( const QCString& text, bool namespaceProcessing=FALSE ); 1042 bool setContent( const QByteArray& text, bool namespaceProcessing=FALSE ); 1043 bool setContent( const QString& text, bool namespaceProcessing=FALSE ); 1044 bool setContent( QIODevice* dev, bool namespaceProcessing=FALSE ); 1045 QDomNamedNodeMap 1046 QDomNode namedItemNS( const QString& nsURI, const QString& localName ) const; 1047 QDomNode setNamedItemNS( const QDomNode& newNode ); 1048 QDomNode removeNamedItemNS( const QString& nsURI, const QString& localName ); 1049 1050 QDomElement 1051 QString attributeNS( const QString nsURI, const QString& localName, const QString& defValue ) const; 1052 void setAttributeNS( const QString nsURI, const QString& qName, const QString& value ); 1053 void setAttributeNS( const QString nsURI, const QString& qName, int value ); 1054 void setAttributeNS( const QString nsURI, const QString& qName, uint value ); 1055 void setAttributeNS( const QString nsURI, const QString& qName, double value ); 1056 void removeAttributeNS( const QString& nsURI, const QString& localName ); 1057 QDomAttr attributeNodeNS( const QString& nsURI, const QString& localName ); 1058 QDomAttr setAttributeNodeNS( const QDomAttr& newAttr ); 1059 QDomNodeList elementsByTagNameNS( const QString& nsURI, const QString& localName ) const; 1060 bool hasAttributeNS( const QString& nsURI, const QString& localName ) const; 1061 1062 1063 QXmlAttributes 1064 void clear(); 1065 void append( const QString &qName, const QString &uri, const QString &localPart, const QString &value ); 1066 1067 QXmlInputSource: 1068 void setData( const QByteArray& dat ); 1069 void fetchData(); 1070 QString data(); 1071 QChar next(); 1072 void reset(); 1073 QString fromRawData( const QByteArray &data, bool beginning = FALSE ); 1074 1075 QXmlSimpleReader: 1076 bool parse( const QXmlInputSource& input, bool incremental ); 1077 bool parseContinue(); 1078 1079 QXmlEntityResolver: 1080 bool startEntity( const QString& name ); 1081 bool endEntity( const QString& name ); 1082 1083 1084 1085New classes 1086----------- 1087 1088QAquaStyle (only on MacOS X) 1089QCleanupHandler 1090QComponentFactory 1091QComponentFactoryInterface 1092QComponentServerInterface 1093QContextMenuEvent 1094QDesktopWidget 1095QDockArea 1096QDockWindow 1097QErrorMessage 1098QFeatureListInterface 1099QHttp [network] 1100QInterfaceListInterface 1101QInterfacePtr 1102QIMEvent 1103QLibrary 1104QLibraryInterface 1105QStyleFactory 1106QStyleInterface 1107QTextCodecInterface 1108QUnknownInterface 1109QUuid 1110QRegExpValidator 1111QTextEdit 1112 1113 1114Renamed Classes 1115--------------- 1116 1117QArray has been renamed QMemArray 1118QCollection has been renamed QPtrCollection 1119QList has been renamed QPtrList 1120QListIterator has been renamed QPtrListIterator 1121QQueue has been renamed QPtrQueue 1122QStack has been renamed QPtrStack 1123QVector has been renamed QPtrVector 1124 1125The include file names have changed accordingly (e.g., <qmemarray.h>). 1126 1127 1128New Modules 1129----------- 1130 1131SQL 1132 QDataBrowser 1133 QDataTable 1134 QDataView 1135 QDateTimeEdit 1136 QEditFactory 1137 1138 1139Obsolete classes 1140---------------- 1141 1142 QSemiModal, use QDialog instead. 1143 QMultiLineEdit, use QTextEdit instead. 1144 QTableView, use QScrollView or QTable instead. 1145 QAsyncIO, QDataSink, QDataSource, QDataPump and QIODeviceSource 1146 1147 1148Obsolete functions 1149------------------ 1150 QActionGroup::insert( QAction * ), use QActionGroup::add( QAction* ) instead. 1151 QApplication::setWinStyleHighlightColor( const QColor &c ), use setPalette() instead 1152 QApplication::winStyleHighlightColor(), use palette() instead 1153 QDir::encodedEntryList( int filterSpec, int sortSpec ), use QDir::entryList() instead 1154 QDir::encodedEntryList( const QString &nameFilter, int filterSpec, int sortSpec ), use QDir::entryList() instead 1155 QMainWindow::addToolBar( QDockWindow *, Dock = Top, bool newLine = FALSE ); 1156 QMainWindow::addToolBar( QDockWindow *, const QString &label, Dock = Top, bool newLine = FALSE ); 1157 QMainWindow::moveToolBar( QDockWindow *, Dock = Top ); 1158 QMainWindow::moveToolBar( QDockWindow *, Dock, bool nl, int index, int extraOffset = -1 ); 1159 QMainWindow::removeToolBar( QDockWindow * ); 1160 QMainWindow::toolBarsMovable() const; 1161 QMainWindow::toolBars( Dock dock ) const; 1162 QMainWindow::lineUpToolBars( bool keepNewLines = FALSE ); 1163 QRegExp::match( const QString& str, int index = 0, int *len = 0, 1164 bool indexIsStart = TRUE ); 1165 QToolButton::setOnIconSet( const QIconSet & ) 1166 QToolButton::setOffIconSet( const QIconSet & ) 1167 QToolButton::onIconSet() const 1168 QToolButton::offIconSet() const 1169 QToolButton::setIconSet( const QIconSet & set, bool on ) 1170 QToolButton::iconSet( bool on ) const 1171 QXmlInputSource::QXmlInputSource( QFile& file ), use QXmlInputSource( QIODevice *dev ) instead. 1172 QXmlInputSource::QXmlInputSource( QTextStream& stream ), use QXmlInputSource( QIODevice *dev ) instead. 1173 1174Removed functions: 1175 QWidget::setFontPropagation 1176 QWidget::setPalettePropagation 1177 QMenuBar::setActItem 1178 QMenuBar::setWindowsAltMode 1179 QCheckListItem::paintBranches 1180 QString::visual 1181 QString::basicDirection 1182 QRegExp::find( const QString& str, int index ) const; - has been renamed QRegExp::search() 1183 QFont::charSet() const, not needed anymore 1184 QFont::setCharSet( QFont::CharSet ), not needed anymore 1185 QPushButton::upButton(), not relevant anymore 1186 QPushButton::downButton(), not relevant anymore 1187 QSpinBox::upButton(), not relevant anymore 1188 QSpinBox::downButton(), not relevant anymore 1189 1190 1191Removed preprocessor directives 1192------------------------------- 1193 1194 qcstring.h no longer contains the following defines: 1195 1196 #define strlen qstrlen 1197 #define strcpy qstrcpy 1198 #define strcmp qstrcmp 1199 #define strncmp qstrncmp 1200 #define stricmp qstricmp 1201 #define strnicmp qstrnicmp 1202 1203 These directives were meant to automagically replace calls to the 1204 above listed standard C functions with the equivalent Qt wrappers. 1205 The latter pre-check the input parameters for null pointers as those 1206 might cause crashes on some platforms. 1207 1208 Although convenient, this trick turned out to sometimes conflict with 1209 third-party code, or, simply be nullified by standard system and 1210 library headers depending on version and include order. 1211 1212 The name of some debugging macro variables has been changed. 1213 1214 DEBUG becomes QT_DEBUG 1215 NO_DEBUG becomes QT_NO_DEBUG 1216 NO_CHECK becomes QT_NO_CHECK 1217 CHECK_STATE becomes QT_CHECK_STATE 1218 CHECK_RANGE becomes QT_CHECK_RANGE 1219 CHECK_NULL becomes QT_CHECK_NULL 1220 CHECK_MATH becomes QT_CHECK_MATH 1221 1222 The name of some other debugging macro functions has also been changed 1223 but source compatibility should not be affected if the macro variable 1224 QT_CLEAN_NAMESPACE is not defined: 1225 1226 ASSERT becomes Q_ASSERT 1227 CHECK_PTR becomes Q_CHECK_PTR 1228 1229 For the record these undocumented macro variables that are not part of 1230 the API have been changed: 1231 1232 _OS_*_ becomes Q_OS_* 1233 _WS_*_ becomes Q_WS_* 1234 _CC_*_ becomes Q_CC_* 1235 1236 1237[Qt 3.0] 1238 1239