| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the documentation of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:FDL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU Free Documentation License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Free |
| ** Documentation License version 1.3 as published by the Free Software |
| ** Foundation and appearing in the file included in the packaging of |
| ** this file. Please review the following information to ensure |
| ** the GNU Free Documentation License version 1.3 requirements |
| ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| /*! |
| \page sourcebreaks.html |
| \title C++ API changes |
| \brief Lists the source incompatible API changes in Qt 5. |
| |
| Qt 5 introduces some source incompatible changes. Here we list some important |
| ones, but you can find more complete lists in |
| \c {<Qt 5 Install Dir>/qtbase/dist/changes-5.x.x}. |
| |
| The following sections list the API changes in each module and provide |
| recommendations for handling those changes. |
| |
| \section1 Changes to Qt Core |
| \list |
| \li \l{QLibrary::resolve()} now returns a function pointer instead of \c{void} pointer. |
| \li \c{QLibraryInfo::buildKey()} and the corresponding \c{QT_BUILD_KEY} macro are removed. |
| You must remove all references to this function and macro, as build key is not necessary now. |
| \li The \l{QTranslator::translate()} function signature is changed to set the default value of \c{n} to -1. |
| We recommend you to update the implementation of this virtual function in your sources. |
| \li \c{QBool} is removed. In Qt 4, \l{QString::contains()}, \l{QByteArray::contains()}, and \l{QList::contains()} |
| returned an internal \c{QBool} type so that the Qt3 code |
| \c{if (a.contains() == 2)} would not compile anymore. |
| If your code uses \c{QBool}, replace it with \c{bool}. |
| \li The \c{QUuid::operator QString()} implicit conversion operator is |
| removed. Use the \l{QUuid::toString()} function instead. |
| \li \l{QProcess::ForwardedChannels} no longer forwards the output to the |
| GUI applications on the Windows platform, unless those applications |
| create a console. |
| \li \c{QSystemLocale} is not public anymore. Use \l{QLocale} instead. |
| \li Default value of the \l{QSortFilterProxyModel::dynamicSortFilter} |
| property is changed to \c{true}. |
| \li \c{QTextCodecPlugin} is removed as all the text codecs are part of |
| Qt Core now. |
| \li \c{QFSFileEngine}, \c{QAbstractFileEngine}, \c{QAbstractFileEngineIterator}, |
| and \c{QAbstractFileEngineHandler} are no longer public. |
| We recommend you to avoid using these classes as there is no |
| compatibility promise. |
| \li \l{qDebug()}, \l{qWarning()}, \l{qCritical()}, and \l{qFatal()} are |
| changed to macros now to track the origin of the message in source code. |
| The information to be printed can be configured (for the default message |
| handler) by setting the new \c{QT_MESSAGE_PATTERN} environment variable. |
| \l{qInstallMsgHandler()} is deprecated, so we recommend using |
| \l{qInstallMessageHandler()} instead. |
| \li \l{QPointer} is changed to use \l{QWeakPointer}. The old guard mechanism |
| has been removed, which causes a slight change in behavior when using |
| \l{QPointer}. In earlier Qt versions, if a \l{QPointer} is used on a |
| \l{QWidget} (or a subclass of QWidget), the \l{QPointer} was cleared by |
| the \l{QWidget} destructor. In Qt 5, the \l{QPointer} is cleared by the |
| \l{QObject} destructor along with the \l{QWeakPointer}s. Any |
| \l{QPointer} tracking a widget is not cleared before the \l{QWidget} |
| destructor destroys the children for the widget being tracked. |
| \li \l{Qt::WFlags} is deprecated, use \l{Qt::WindowFlags} instead. |
| This typedef dates from the Qt 1 days, and such abbreviations are not |
| current Qt style. |
| \li \l{Qt::HANDLE} typedef is now defined as \c{void *} on all platforms. |
| \li The non-atomic convenience methods of \l QAtomicInt and |
| \l QAtomicPointer (that is, \c operator=, \c {operator int}, |
| \c {operator T*}, \c operator!, \c operator==, \c operator!=, and |
| \c operator->) have been removed as they performed implicit loads and |
| stores of unspecified memory ordering. Code dealing with loading and |
| storing is expected to use \c load(), \c loadAquire(), \c store(), and |
| \c storeRelease(), instead. |
| \li The return type of \c {QFlags<Enum>::operator int()} matches the enum's |
| underlying type (signed or unsigned) instead of always being \c int. |
| This allows QFlags over enums of the unsigned type (for example, |
| Qt::MouseButton). |
| \li Because of major changes in the behavior of |
| \l QTextBoundaryFinder::boundaryReasons(), the \c StartWord and |
| \c EndWord enum values were replaced with the \c StartOfItem and |
| \c EndOfItem values to enforce revision of the affected code. |
| \li A number of functions in <QtAlgorithms> are deprecated. Use the |
| implementations available in the STL, as described in |
| \l{Porting Guidelines}. |
| \li \c {setSharable()} and \c {isSharable()} in Qt containers are |
| deprecated and will be removed in Qt 6. You should not use them in new |
| applications. If you used them in existing applications, even though |
| they are not documented, you should port away from them. |
| \endlist |
| |
| \section2 Changes to QAction |
| |
| The Softkeys API is removed, so the following functions and enums are |
| removed: |
| |
| \list |
| \li \c QAction::setSoftKeyRole() |
| \li \c QAction::softKeyRole() |
| \li \c QAction::SoftKeyRole |
| \li \c Qt::WA_MergeSoftkeys |
| \li \c Qt::WA_MergeSoftkeysRecursively |
| \li \c Qt::WindowSoftkeysVisibleHint |
| \li \c Qt::WindowSoftkeysRespondHint |
| \endlist |
| |
| \section2 Changes to QChar |
| |
| \list |
| \li \c{QChar::NoCategory} is removed. The \l{QChar::Other_NotAssigned} |
| enum value is returned for unassigned codepoints now. |
| \li \l{QChar::Joining} and \l{QChar::joining()} are deprecated. Use the |
| \l{QChar::JoiningType} enum and \l{QChar::joiningType()} function |
| instead. |
| \endlist |
| |
| \section2 Changes to QCoreApplication |
| |
| \list |
| \li \l{QCoreApplication::translate()} no longer returns the source text |
| if the translation is empty. Use the Qt Linguist Release tool |
| (\c{lrelease -removeidentical}) instead for optimization. |
| \li \c{QCoreApplication::setEventFilter()} and |
| \c{QApplication::x11EventFilter/macEventFilter/qwsEventFilter/winEventFilter} |
| are replaced with \l{QCoreApplication::installNativeEventFilter()} |
| and \l{QCoreApplication::removeNativeEventFilter()} for an API much |
| closer to QEvent filtering. |
| \note The native events that can be filtered this way depend on the |
| \l{Qt Platform Abstraction}{QPA} backend chosen at runtime. On X11, |
| XEvents are replaced with |
| \c{xcb_generic_event_t} due to the switch to XCB, which requires |
| porting the application code to XCB as well. |
| \li \c QCoreApplication::Type and \c QApplication::type() are removed. |
| These Qt 3 legacy application types did not match the application |
| types available in Qt 5. Use \c qobject_cast instead to dynamically |
| find out the exact application type. |
| \li \l{QCoreApplication::hasPendingEvents} and |
| \l{QAbstractEventDispatcher::hasPendingEvents} are deprecated. |
| \endlist |
| |
| \section2 Changes to QEvent |
| |
| \list |
| \li \c{QEvent::AccessibilityPrepare}, \c{QEvent::AccessibilityHelp}, and |
| \c{QEvent::AccessibilityDescription} are removed. |
| \li \l{QEvent::TouchCancel} is introduced to use it on systems where it |
| makes sense to differentiate between a regular \l{QEvent::TouchEnd} |
| and abrupt touch sequence cancellations caused by the compositor. |
| For example, when a swype gesture is recognized. |
| \endlist |
| |
| \section2 Changes to QFile |
| |
| \list |
| \li \l{QFile::setEncodingFunction()} and \l{QFile::setDecodingFunction()} |
| are deprecated. |
| \li \l{QFile::encodeName()} and \l{QFile::decodeName()} are now |
| hard-coded to operate\ on \l{QString::fromLocal8Bit()} and |
| \l{QString::toLocal8Bit()} only. The old behavior is still possible |
| using \l{QTextCodec::setCodecForLocale()}, but the new code should |
| not make assumptions about the file system encoding and older code |
| should remove such assumptions. |
| \endlist |
| |
| \section2 Changes to QFont |
| |
| \list |
| \li \c QFont::handle() is removed. |
| \li \l{QFont::rawName()} and \l{QFont::setRawName()} are deprecated. |
| \endlist |
| |
| \section2 Changes to QMetaType |
| |
| \list |
| \li \c{QMetaType::construct()} is renamed as \l{QMetaType::create()}. |
| \li \c{QMetaType::unregisterType()} is removed. |
| \li \l{QMetaType} now records whether the type argument inherits QObject. |
| Such information can be useful for scripting APIs, so that custom QObject subclasses |
| are treated as QObject pointers. For example, in \l{Qt Script} this |
| means \l{QScriptValue::isQObject()} can be \c true, where it was |
| \c false before. |
| \li \c{QMetaType::QWidgetStar} is removed. Use \l{qMetaTypeId()}{qMetaTypeId<QWidget*>()} |
| or \l{QVariant::canConvert()}{QVariant::canConvert<QWidget*>()} instead. |
| \li \c{Q_DECLARE_METATYPE(type)} now requires \c{type} to be fully defined. |
| This means, \c{Q_DECLARE_METATYPE(QSharedPointer<t>)} and \c{Q_DECLARE_METATYPE(QWeakPointer<t>)} |
| also need \c{type} to be fully defined. |
| In cases where a forward declared type is needed as a meta-type, use \c{Q_DECLARE_OPAQUE_POINTER(type)}. |
| \endlist |
| |
| \section2 Changes to QMetaMethod |
| |
| \list |
| \li \c{QMetaMethod::signature()} is renamed as \l{QMetaMethod::methodSignature()}, |
| and the return type is changed to \l{QByteArray}. This change is to enable |
| generating the signature string on demand, rather than storing it in |
| the meta-data. |
| \li \l{QMetaMethod::typeName()} no longer returns an empty string if the return |
| type is \c{void}, instead it returns \c{"void"}. The recommended way of checking whether a |
| method returns \c{void} is to compare the return value of \l{QMetaMethod::returnType()} |
| with \l{QMetaType::Void}. |
| \endlist |
| |
| \section2 Changes to QObject |
| |
| \list |
| \li \l{QObject::connectNotify()} and \l {QObject::disconnectNotify()} |
| now need a \l{QMetaMethod} argument that identifies the signal, |
| rather than a \c{const char} pointer. |
| \li \l{QObject::trUtf8()} and \c{QCoreApplication::Encoding} are |
| deprecated. Qt assumes that the source code is encoded in UTF-8. |
| \endlist |
| |
| \section2 Changes to QVariant |
| |
| \list |
| \li The \l{QVariant} constructor which takes \l{Qt::GlobalColor} argument is removed. |
| Code constructing such variants must explicitly call \l{QColor} constructor now. |
| For example, instead of \c{QVariant(Qt::red)}, use |
| \c{QVariant(QColor(Qt::red))} to create a \l{QVariant} instance. |
| \li Implicit creation of QVariant objects from the enum values Qt::BrushStyle, |
| Qt::PenStyle, and Qt::CursorShape has been removed. Create objects |
| explicitly or use \c static_cast<int>(Qt::SolidLine) to create a |
| QVariant of type \c int with the same value as the enum. |
| \endlist |
| |
| \section2 Changes to QAbstractEventDispatcher |
| |
| \list |
| \li The signature for the pure-virtual \c{registerTimer()} function is changed. |
| All subclasses of \l{QAbstractEventDispatcher} must re-implement the function |
| with this new signature: |
| |
| \code |
| virtual void registerTimer(int timerId, int interval,Qt::TimerType timerType, QObject *object) = 0; |
| \endcode |
| \li QAbstractEventDispatcher::TimerInfo is no longer a \c{typedef} of \c{QPair<int, int>}. |
| It is now a \c{struct} with 3 members: \c{int timerId}, \c{int interval}, and \c{Qt::TimerType timerType}. |
| Update the \l{QAbstractEventDispatcher::registeredTimers()} function |
| with this change. |
| \endlist |
| |
| \section2 Changes to QDir |
| |
| \list |
| \li The \c{convertSeparators()} function is removed. Use \l{QDir::toNativeSeparators()} instead. |
| \li The \c{QDir::NoDotAndDotDot} enum value is removed. Use \l{QDir::NoDot} or \l{QDir::NoDotDot} instead. |
| \endlist |
| |
| \section2 Changes to QLocale |
| |
| \list |
| \li The QLocale data has been updated to CLDR 22.1. The historical language |
| and country names were updated to their modern values and some |
| deprecated names were dropped or mapped to their modern alternatives. |
| \li The \l{QLocale::toShort()}, \l{QLocale::toUShort()}, \l{QLocale::toInt()}, |
| \l{QLocale::toUInt()}, \l{QLocale::toLongLong()}, and \l{QLocale::toULongLong()} functions |
| no longer take the argument for base. They localize base 10 conversions. To convert other bases, use the \l{QString} functions instead. |
| \endlist |
| |
| \section2 Changes to QAbstractItemModel |
| |
| \list |
| \li \l{QAbstractItemModel::beginMoveRows()} no longer emits the |
| \c{layoutAboutToBeChanged} signal, and \l{QAbstractItemModel::endMoveRows()} |
| no longer emits the \c{layoutChanged} signal. |
| All proxy models must connect to (and disconnect from) the |
| \l{QAbstractItemModel::rowsAboutToBeMoved} and |
| \l{QAbstractItemModel::rowsMoved} signals. |
| \li \l{QAbstractItemModel::sibling()} is virtual now to allow implementations to optimize based on internal data. |
| \li \l{QAbstractItemModel::createIndex()} method now only provides the |
| \c void* and \c quintptr overloads, making calls with a literal \c 0 |
| (\c{createIndex(row, col, 0)}) ambiguous. Either cast |
| \c{quintptr(0)} or omit the third argument to get the \c void* |
| overload. |
| \li \l{QAbstractItemModel::setRoleNames()} is deprecated. Use \l{QAbstractItemModel::roleNames()} instead. |
| \l{QAbstractItemModel::roleNames()} is virtual now to allow a consistent API with the rest of QAbstractItemModel. Reimplementing the virtual methods to provide the elements is preferred to setting those directly. |
| \endlist |
| |
| \section2 Changes to QString |
| |
| \list |
| \li \l{QString} and \l{QByteArray} constructors now use a negative size to |
| indicate that the string passed is null-terminated (a null-terminated |
| array of \l{QChar}, in the case of QString). In Qt 4, negative sizes |
| were ignored, which resulted in empty \l{QString} and \l{QByteArray}. |
| The size argument now has a default value of \c -1, replacing the |
| separate constructors that did the same. |
| \li \l{QString::mid()}, \l{QString::midRef()}, and \l{QByteArray::mid()} now return an empty \c{QString}, \c{QStringRef}, and \c{QByteArray} respectively, |
| if the position passed is equal to the length (that is, right after the |
| last character or byte). |
| In Qt 4, they returned a null \c{QString} or a null \c{QStringRef}. |
| \li The following \l{QString} functions use the C locale instead of the default or system locale: |
| \list |
| \li \l{QString::toLongLong()}{toLongLong()} |
| \li \l{QString::toULongLong()}{toULongLong()} |
| \li \l{QString::toLong()}{toLong()} |
| \li \l{QString::toULong()}{toULong()} |
| \li \l{QString::toInt()}{toInt()} |
| \li \l{QString::toUInt()}{toUInt()} |
| \li \l{QString::toShort()}{toShort()} |
| \li \l{QString::toUShort()}{toUShort()} |
| \li \l{QString::toDouble()}{toDouble()} |
| \li \l{QString::toFloat()}{toFloat()} |
| \endlist |
| This is to guarantee consistent default conversion of strings. For locale-aware conversions |
| use the equivalent \l{QLocale} functions. |
| \endlist |
| |
| \section2 Changes to QDate, QTime, and QDateTime |
| |
| \list |
| \li QDate only implements the Gregorian calendar, and the switch to the Julian |
| calendar before 1582 has been removed. This means all QDate functions return |
| different results for dates prior to 15 October 1582, and there is |
| no longer a gap between 4 October 1582 and 15 October 1582. |
| \li \l{QDate::setYMD()} is deprecated, use \l{QDate::setDate()} instead. |
| \li Adding days to a null QDate or seconds to a null QTime will no longer return a valid QDate/QTime. |
| \li The \l{QDate::addDays()} and QDateTime::addDays() functions now take |
| a \c{qint64} argument, and the \l{QDate::daysTo()} and |
| \l{QDateTime::daysTo()} functions now return a \c{qint64} value. |
| \li \l QDate and \l QTime are the \c userProperty for the \l QTimeEdit |
| and \l QDateEdit classes, insted of QDateTime as it was for the 4.7 |
| and 4.8 releases. The USER property for these classes was removed |
| before Qt 4.7.0 and added again in Qt 5.0. |
| \li The serialization behavior for \l QDateTime is reverted to pre-Qt 5, |
| because \l Qt::LocalTime is the local time (that is, \c {ymd hms}) |
| regardless of the underlying system time, time zone, or changes in |
| the system zone. Therefore, the consistent behavior when serialising |
| is to save and restore as the local time and not its UTC equivalent. |
| This means that the \l QDataStream version is 14 since Qt 5.1. |
| \li The supported date range in \l QDateTime has been reduced to about |
| +/- 292 million years, the range supported by the number of msecs |
| since the Unix epoch of 1 Jan 1970 as stored in a \c qint64, and as |
| able to be used in \l{QDateTime::setMSecsSinceEpoch()} and |
| \l{QDateTime::toMSecsSinceEpoch()}. |
| \li \l{QDate::fromString()} and \l{QDateTime::fromString()} require |
| non-numeric date component separators when parsing \l{Qt::ISODate}. |
| A string like \e 2000901901 will no longer be recognized as a valid |
| ISO date, whereas \e 2000/01/01 will, even though it differs from |
| the ISO format \e 2000-01-01. |
| \endlist |
| |
| \section2 Changes to QTextCodec |
| |
| \list |
| \li \c{QTextCodec::codecForCStrings()} and \c{QTextCodec::setCodecForCStrings()} are removed as they were |
| creating uncertainty/bugs in using QString easily and (to a lesser extent) performance issues. |
| \li \c{QTextCodec::codecForTr()} and \c{QTextCodec::setCodecForTr()} are removed. |
| \endlist |
| |
| \section2 Changes to QUrl |
| |
| \l{QUrl} changed considerably in Qt 5 to comply better with the URL |
| specifications and with brokenness out there. The following list summarizes |
| the most important functional changes: |
| |
| \list |
| \li \l{QUrl::setPath()} no longer handles relative paths. They are by |
| definition invalid. Use the \l{QUrl::NormalizePathSegments} flag to |
| remove /./ or /../ sequences as much as possible. It will not |
| remove /../ from the beginning of the path. |
| \li \l{QUrl} has been changed to operate only on percent-encoded forms. Fully-decoded forms where the percent character stands for itself, |
| can no longer be encoded, as the getters and setters with \e encoded |
| in the name are deprecated (except \l{QUrl::toEncoded()} and |
| \l{QUrl::fromEncoded()}). |
| |
| The most notable difference with this change is when dealing with |
| \l{QUrl::toString()}. In earlier Qt versions, this function would |
| return percent characters in the URL, but now it returns \e %25 like |
| \l{QUrl::toEncoded()} does. |
| \li \l{QUrl} no longer decodes %7B and %7D to "{" and "}" in the |
| output of \l{QUrl::toString()}. |
| \li \l{QUrl} now defaults to decoded mode in the getters and setters for |
| \c userName, \c password, \c host, \c topLevelDomain, \c path and |
| \c fileName. This means a % in one of those fields is now returned (or |
| set) as \c % rather than \c %25. If the former behavior was expected, |
| pass \c PrettyDecoded to the getter and \c TolerantMode to the |
| setter. |
| \li \l{QUrl} no longer has functions that handle individual query items and query delimiters, such as \c addQueryItem() and \c queryPairDelimiter(). |
| These have been moved to the new \l{QUrlQuery} class. |
| \li \l{QUrl} no longer considers all delimiter characters equivalent to |
| their percent-encoded forms. \l{QUrl} and \l{QUrlQuery} always keep |
| all delimiters exactly as they were in the original URL text. |
| \li \l{QUrl} no longer supports \l{QUrl::FullyDecoded} mode in |
| \l{QUrl::authority()} and \l{QUrl::userInfo()}, nor \l{QUrl::DecodedMode} |
| in \l{QUrl::setAuthority()} and \l{QUrl::setUserInfo()}. |
| \li \l{QUrl} no longer decodes %23 found in the fragment to "#" |
| in the output of \l{QUrl::toString} (\c FullyEncoded) or |
| \l{QUrl::toEncoded()}. |
| \endlist |
| |
| \section1 Changes to Qt Concurrent |
| |
| \l{Qt Concurrent} has been moved from \l {Qt Core} to its own module. To |
| link against the Qt Core module, add this line to the project file: |
| |
| \code |
| QT += concurrent |
| \endcode |
| |
| \note The \c {QtConcurrent::Exception} class is renamed \l{QException} and |
| \c {QtConcurrent::UnhandledException} class is renamed |
| \l{QUnhandledException}. They remain in Qt Core. |
| |
| \section1 Changes to Qt GUI |
| \list |
| \li \l{QPen} now has a default width of 1 instead of 0. Thus, it is no longer \l{QPen::isCosmetic()}{cosmetic} by default. |
| \li \l{QAccessibleActionInterface} is now based on providing a list of |
| action names. All functions have been changed to take arguments of type |
| \c string insted of \c{int}. |
| \li The constructor of \l{QAccessibleEvent} does not need the \c{child} parameter anymore, |
| and the corresponding \c{QAccessibleEvent::child()} function is removed. |
| \li The constructor of \l{QTabletEvent} does not need the \c{hiResGlobalPos} argument anymore, |
| as all coordinates are floating point-based now. |
| \li \c{QIconEngineV2} is now merged into \l{QIconEngine}. Update your sources to use \c{QIconEngine} instead of \c{QIconEngineV2}. |
| \li \l{QSound} is moved to Qt Multimedia from Qt GUI. |
| \li \c QDesktopServices::storageLocation() and \c QDesktopServices::displayName() are replaced by \l{QStandardPaths::writableLocation()} |
| and \l{QStandardPaths::displayName()} respectively. They are now in the \l{Qt Core} module. |
| Make sure to read the \l{QDesktopServices::storageLocation()} documentation when porting from \l{QDesktopServices::DataLocation}. |
| \li \c QPixmap::grabWindow() and \c QPixmap::grabWidget() are removed. Use \l{QScreen::grabWindow()} instead. |
| \li The session management API has been simplified. The \c commitData() |
| function is removed and replaced by the signal |
| \l{QGuiApplication::commitDataRequest()}. \l QApplication and |
| \l QGuiApplication will emit this signal from 5.2 onward on supported |
| platforms (Linux and Windows). |
| \li \c{QWidget *widget()} is replaced with \c {QObject *target()} to avoid |
| \l{QWidget} dependencies. |
| \endlist |
| |
| \section2 Changes to QAccessibleInterface |
| |
| \list |
| \li The \e child integer parameters are removed to bring |
| \l{QAccessibleInterface} closer to IAccessible2. This means that |
| the following functions lose the integer parameter: |
| \list |
| \li \c{text(Text t, int child)} is now |
| \l{QAccessibleInterface::text()}{text(Text t)} |
| \li \c{rect(int child)} is now |
| \l{QAccessibleInterface::rect()}{rect()} |
| \li \c{setText(Text t, int child, const QString &text)} is now |
| \l{QAccessibleInterface::setText()}{setText(Text t, const QString &text)} |
| \li \c{role(int child)} is now \l{QAccessibleInterface::role()} |
| {role()} |
| \li \c{state(int child)} is now |
| \l{QAccessibleInterface::state()}{state()} |
| \endlist |
| \li \c{navigate()} is replaced with \l{QAccessibleInterface::parent()} |
| {parent()} and \l{QAccessibleInterface::child()}{child()} to |
| navigate the hierarchy. |
| \li \c{relationTo()} is replaced with |
| \l{QAccessibleInterface::relations()}{relations()}. |
| \li \c{QAccessibleInterface::userActionCount()}, |
| \c{QAccessibleInterface::actionText()}, and |
| \c{QAccessibleInterface::doAction()} are removed. |
| We recommend using the \l{QAccessibleInterface} subclasses to |
| implement the \l{QAccessibleActionInterface} instead. |
| \endlist |
| |
| \section2 Changes to QImage |
| |
| \list |
| \li \l{QImage::fill()} on an image with format \c{Format_RGB888} now |
| expects image data in RGB layout as opposed to BGR layout. |
| This is to ensure consistency with RGB32 and other 32-bit formats. |
| \li The behavior of \l{QImage::load()}, \l{QImage::loadFromData()}, |
| \l{QPixmap::load()}, and \l{QPixmap::loadFromData()} on a non-null |
| image changed so that if the functions fail to load the image |
| (return \c false), the the existent image data is invalidated, so |
| that \c isNull() is guaranteed to return \c true in this case. |
| \endlist |
| |
| \section2 Changes to QPainter |
| |
| \list |
| \li \l{QPainter} does not support uniting clipped regions anymore. Use |
| \l{QRegion::united()} instead to unite clips and pass the result to |
| \l{QPainter}. |
| \li \l{QPainter} fill rules when not using antialiased painting |
| have changed so that the aliased and antialiased coordinate systems |
| match. There used to be an offset of slightly less than half a pixel |
| when doing sub-pixel rendering, in order to be consistent with the |
| old X11 paint engine. The new behavior should be more predictable |
| and give the same consistent rounding for images and pixmaps as for |
| paths and rectangle filling. To get the old behavior, set the |
| \l{QPainter::Qt4CompatiblePainting} render hint. |
| \endlist |
| |
| \section2 Changes to QTouchEvent |
| |
| \list |
| \li \c{QTouchEvent::DeviceType} and \c{QTouchEvent::deviceType()} are deprecated |
| as \l{QTouchDevice} provides a better way to identify and access the |
| device from which the events originate. |
| \li The constructor now takes a \l{QTouchDevice} pointer instead of \c{DeviceType} value. |
| \li \c TouchPointStateMask and \c TouchPointPrimary are removed from the |
| \l{Qt::TouchPointStates} enum. |
| \li \c{QTouchEvent::TouchPoint::isPrimary()} is removed. |
| |
| \endlist |
| |
| \section1 Changes to Qt Widgets |
| \list |
| \li \l{QItemEditorFactory::createEditor()} and |
| \l{QItemEditorFactory::valuePropertyName()} signatures |
| are changed to take arguments of type \c{int} instead of \l{QVariant::Type}. |
| \li \c{QInputContext} is removed as related getter and setter functions in \l{QWidget} and \l{QApplication} are removed. |
| Input contexts are now platform-specific. |
| \li \l{QInputDialog::getInteger()} is deprecated. Use \l{QInputDialog::getInt()} instead. |
| \li The \c{QStyleOption*V{2,3,4}} classes are removed, and their members |
| are merged with the respective base classes. The removed classes are |
| left as typedefs for binary compatibility. |
| \li \l{QGraphicsItem} and its derived classes can no longer pass a |
| \l{QGraphicsScene} to the item's constructor. |
| Construct the item without a scene and call \l{QGraphicsScene::addItem()} |
| to add the item to the scene. |
| \li \c{QProxyModel} is removed. Use \l{QAbstractProxyModel} and the related |
| classes instead. A copy of \c{QProxyModel} is available in the |
| \l{http://wiki.qt.io/Qt_5_UI_Helpers}{Ui Helpers} repository. |
| \endlist |
| |
| \section2 Changes to QApplication |
| |
| \list |
| \li \c QApplication::setGraphicsSystem() is removed, because the |
| introduction of \l{Qt Platform Abstraction}{QPA} made it redundant. |
| \li \c{QApplication::commitData} and \c{QApplication::saveState} virtual |
| methods that were used for session management are removed. Connect |
| to the \l{QApplication::commitDataRequest} and |
| \l{QApplication::saveStateRequest} signals instead. Use |
| \l{QApplication::isSavingSession()} if the \l{QWidget::closeEvent} |
| if your window needs to know whether it is being called during |
| shutdown. |
| \endlist |
| |
| \section2 Changes to QStyle |
| |
| \list |
| \li \c{QStyle::standardIconImplementation()} and \c{QStyle::layoutSpacingImplementation()} are removed, |
| and the \l{QStyle::standardIcon()} and \l{QStyle::layoutSpacing()} functions are made pure virtual now. |
| The removed functions were introduced in Qt 4 for binary compatibility reasons. |
| \li \c QMotifStyle, \c QPlastiqueStyle, \c QCleanlooksStyle, and \c QCDEStyle are |
| replaced with a new \e fusion style. If your application depends |
| on any of these removed styles, you can either use the |
| \l{http://code.qt.io/cgit/qt/qtstyleplugins.git/}{qtstyleplugins} project |
| to get these styles or update your application to use the new fusion style. |
| For more details about this change, see |
| \l{https://blog.qt.io/blog/2012/10/30/cleaning-up-styles-in-qt5-and-adding-fusion/}. |
| \li The following QStyle implementations have been made internal: |
| \list |
| \li QFusionStyle |
| \li QGtkStyle |
| \li QMacStyle |
| \li QWindowsCEStyle |
| \li QWindowsMobileStyle |
| \li QWindowsStyle |
| \li QWindowsVistaStyle |
| \li QWindowsXPStyle |
| \endlist |
| |
| Instead of creating instances or inheriting these classes directly, use: |
| \list |
| \li QStyleFactory for creating instances of specific styles. |
| \li QProxyStyle for customizing existing style implementations. |
| \li QCommonStyle as a base for implementing full custom styles. |
| \endlist |
| \endlist |
| |
| \section2 Changes to QHeaderView |
| |
| The following functions are deprecated: |
| \list |
| \li \c{void setMovable(bool movable)} - Use \l{QHeaderView::setSectionsMovable()} instead. |
| \li \c{bool isMovable() const} - Use \l{QHeaderView::sectionsMovable()} instead. |
| \li \c{void setClickable(bool clickable)} - Use \l{QHeaderView::setSectionsClickable()} instead. |
| \li \c{bool isClickable() const} - Use \l{QHeaderView::sectionsClickable()} instead. |
| \li \c{void setResizeMode(int logicalindex, ResizeMode mode)} - Use \l{QHeaderView::setSectionResizeMode()} instead. |
| \li \c{ResizeMode resizeMode(int logicalindex) const} - Use \l{QHeaderView::sectionResizeMode()} instead. |
| \endlist |
| |
| \section2 Changes to QAbstractItemView |
| |
| \list |
| \li The derived classes now emit the \c{clicked()} signal on the left mouse click only, instead of all mouse clicks. |
| \li The virtual \l{QAbstractItemView::dataChanged()} function signature |
| now includes the roles that have changed. |
| The signature is consistent with the \c{dataChanged()} signal in the model. |
| \endlist |
| |
| \section2 Changes to QColorDialog |
| |
| \list |
| \li \l{QColorDialog::customColor()} now returns a \l{QColor} value instead of \c{QRgb}. |
| \li \l{QColorDialog::setCustomColor()} and \l{QColorDialog::setStandardColor()} |
| now need a \l{QColor} value as |
| their second parameter instead of \c{QRgb}. |
| \endlist |
| |
| \section1 Changes to Qt WebKit |
| \list |
| \li The WebKit module in Qt is now split in two modules, \c{webkit} and \c{webkitwidgets}, in order to allow the dependency of |
| the \c{widgets} module to be optional. The benefits will only be |
| available once the QQuickWebView API is made public |
| through C++ in a future version. The \c{webkitwidgets} module adds the \c{webkit} module automatically to the project, |
| so in your application's project file, \c{QT += webkit} should now be modified to: |
| \code |
| QT += webkitwidgets |
| \endcode |
| \li The same applies to the module include, \c{#include <QtWebKit/QtWebKit>} should be modified to: |
| \code |
| #include <QtWebKitWidgets/QtWebKitWidgets> |
| \endcode |
| \li A consequence of the module split is that classes of the \l{Qt WebKit} API aren't all in the new module, so for a better |
| compatibility of your application with both Qt4 and Qt5, #include <QtWebKit/QWebPage>, for example, should be included |
| directly as: |
| \code |
| #include <QWebPage> |
| \endcode |
| The include path will take care of selecting the right module. |
| \li The qwebkitversion.h header has been renamed to q\b{t}webkitversion.h to match other Qt modules, and part of its |
| contents has been moved to qwebkitglobal.h. \c{#include <qwebkitversion.h>} should be replaced with |
| two includes: |
| \code |
| #include <qtwebkitversion.h> |
| #include <qwebkitglobal.h> |
| \endcode |
| \endlist |
| |
| \section1 Changes to Qt Print Support |
| \list |
| \li The \c{QPageSetupDialog::PageSetupDialogOption} enum and the corresponding set and get functions, \c{QPageSetupDialog::options()} |
| and \c{QPageSetupDialog::setOptions()} are removed. |
| \li Support for printing PostScript files has been removed. |
| \li The \c QAbstractPageSetupDialog class is removed. Use \l QPrintDialog |
| instead. |
| \li The \l{QPrintEngine::PrintEnginePropertyKey} enum value |
| \c PPK_SuppressSystemPrintStatus is removed. |
| \li \l{QPrinter} no longer allows you to set an invalid printer name. |
| \endlist |
| |
| \section1 Changes to Qt Network |
| \list |
| \li The \c{QSsl::TlsV1} enum value is renamed as \l{QSsl::TlsV1_0}. |
| \li The \c QHttp, \c QHttpHeader, \c QHttpResponseHeader, and |
| \c QHttpRequestHeader classes are removed. Use \l QNetworkAccessManager |
| instead. |
| \li The \c QFtp and \c QUrlInfo classes are no longer exported. Use |
| \l QNetworkAccessManager instead. |
| Programs that require raw FTP or HTTP streams can use the |
| \l{Qt FTP} and \l{Qt HTTP} compatibility add-on modules that provide |
| the \c{QFtp} and \c{QHttp} classes as they existed in Qt 4. |
| \li \l{QAbstractSocket::connectToHost()} and \l{QAbstractSocket::disconnectFromHost()} |
| are virtual now, |
| and \c{QAbstractSocket::connectToHostImplementation()} and \c{QAbstractSocket::disconnectFromHostImplementation()} are removed. |
| \li \l{QTcpServer::incomingConnection()} now takes arguments of type |
| \c{qintptr} instead of an \c{int}. |
| \li \c{QNetworkConfiguration::bearerName()} is removed. Use the \l{QNetworkConfiguration::bearerTypeName()}{bearerTypeName()} instead. |
| \endlist |
| |
| \section2 Changes to QSslCertificate |
| |
| \list |
| \li \l{QSslCertificate::subjectInfo()} and \l{QSslCertificate::issuerInfo()} |
| now return QStringList instead of a QString. This change makes |
| searching the required information a lot easier than scanning a long |
| string. |
| \li \l{QSslCertificate::isValid()} is deprecated. Use |
| \l{QSslCertificate::isBlacklisted()} instead to avoid binary breaks |
| in the future. |
| \li \l{QSslCertificate::alternateSubjectNames()} is deprecated. Use |
| \l{QSslCertificate::subjectAlternativeNames()} instead. |
| \endlist |
| |
| \section1 Changes to Qt SQL |
| \list |
| \li \l{QSqlQueryModel::indexInQuery()} is virtual now. |
| \li \l{QSqlQueryModel::setQuery()} emits fewer signals. The \c{modelAboutToBeReset()} |
| and \c{modelReset()} signals are sufficient to inform views that they must re-interrogate |
| the model. |
| \li \l{QSqlDriver::subscribeToNotification()}, \l{QSqlDriver::unsubscribeFromNotification()}, |
| \l{QSqlDriver::subscribedToNotifications()}, \l{QSqlDriver::isIdentifierEscaped()}, and |
| \l{QSqlDriver::stripDelimiters()} are virtual now. The corresponding \c xxxImplementation |
| functions are also removed as the subclasses of \l{QSqlDriver} can re-implement those directly. |
| \li \l{QSqlError} now handles alphanumeric error codes that are used by |
| QPSQL. The numeric codes are deprecated. |
| \endlist |
| |
| \section1 Changes to Qt Test |
| \list |
| \li The plain-text, XML and lightxml test output formats are updated to |
| include test result for every row of test data in data-driven tests. In |
| Qt4, only fails and skips were included for individual data rows without |
| the passes information. This limitation prevented accurate test run and |
| pass rates calculation. |
| \li The \c{QTRY_VERIFY} and \c{QTRY_COMPARE} macros are now part of \c{QTestLib}. |
| These macros were part of \c{tests/shared/util.h} earlier, but now they are part |
| of the <QtTest/QtTest> header. |
| In addition, \c{QTRY_VERIFY_WITH_TIMEOUT} and \c{QTRY_COMPARE_WITH_TIMEOUT} are provided |
| to specify custom timeout values. |
| \li The \c{QTEST_NOOP_MAIN} macro is removed. If a test |
| appears to be inapplicable for a particular build at compile-time, it should |
| be omitted either using the .pro file logic or call \c{QSKIP} in the |
| \c{initTestCase()} method to skip the entire test. If you're using the later approach, |
| report a meaningful explanation in the test log. |
| \li The \c{DEPENDS_ON} macro is removed as it misled some users to believe that they could |
| make test functions depend on each other or impose an execution order on test functions. |
| \li \c{QTest::qt_snprintf()} is removed. This was an |
| internal test library function that was exposed in the public API due to its use |
| in a public macro. Any calls to this function must be replaced with |
| \l{QByteArray::qsnprintf()}. |
| \li c{QTest::pixmapsAreEqual()} is removed. Comparison of \l{QPixmap} objects must |
| be done using the \c{QCOMPARE} macro, which provides more informative output in the event of a failure. |
| \li The \c{"mode"} parameter in \c{QSKIP} macro is removed. This parameter caused problems |
| in test metrics calculation because of the \c{SkipAll} mode, which hid information about |
| the skipped test data. Calling \c{QSKIP} in a test function now behaves |
| like \c{SkipSingle}, which is skipping a non-data-driven test function or skipping |
| only the current data row of a data-driven test function. Every skipped |
| data row is now reported in the test log. |
| \li \c{qCompare()} has been replaced by overloading. Code such as |
| \c {qCompare<QString>(l, r)} no longer uses the QString-specific |
| implementation and may fail to compile. We recommend that you |
| replace specialization with overloading. Also, rather than pass |
| explicit template arguments to \c qCompare, let the overload |
| resolution pick the correct one, and cast arguments in case of |
| ambiguous overloads (for example, \c {qCompare(QString(l), r)}). |
| The resulting code will continue to work against older QtTestlib |
| versions. |
| \li \c QTest::qWaitForWindowShown() is replaced with \l{QTest::qWaitForWindowExposed()}. |
| \endlist |
| |
| \section1 Changes to Qt OpenGL |
| |
| Apart from the \l QGLWidget class, the \l{Qt OpenGL} module should not be |
| used for new code. Instead, use the corresponding \e OpenGL classes in |
| \l{Qt GUI}. |
| |
| \list |
| \li \l QGLPixelBuffer is deprecated and implemented by using a hidden |
| \l QGLWidget and a \l QOpenGLFramebufferObject. For offscreen |
| rendering to a texture, switch to using \l QOpenGLFramebufferObject |
| directly to improve performance. |
| \li The default major version of \l QGLFormat is changed to 2 to align |
| it with \l QSurfaceFormat. Applications that want to use a different |
| version, should explicitly request it using |
| \l{QGLFormat::setVersion()}. |
| \li \c{QGLContext::generateFontDisplayLists()} and |
| \c{QGLWidget::fontDisplayListBase()} are removed. |
| \li The \c listBase parameter is removed from \l{QGLWidget::renderText()} |
| functions. |
| \li To ensure support on more platforms, stricter requirements have been |
| introduced for doing threaded \c OpenGL. First, you must call |
| \l{QGLWidget::makeCurrent()} at least once per each |
| \l{QGLWidget::swapBuffers()} call, so that the platform has a chance |
| to synchronize resizing the \c OpenGL surface. Second, before |
| calling \l{QGLWidget::makeCurrent()} or \l{QGLWidget::swapBuffers()} |
| in a separate thread, you must call \l{QGLContext::moveToThread()} |
| to explicitly let Qt know in which thread a \l QGLContext is |
| currently being used. You also need to make sure that the context is |
| not current in the current thread before moving it to a different |
| thread. |
| \endlist |
| |
| \section1 Changes to Qt Global |
| \list |
| \li \c{qMacVersion()} is removed. Use \l{QSysInfo::macVersion()} or |
| \l{QSysInfo::MacintoshVersion} instead. |
| \li \c{Qt::escape()} is deprecated. Use \l{QString::toHtmlEscaped()} instead. |
| \li \c{qIsDetached<>} is removed, becauses it is irrelevant for |
| multi-threaded applications. There is no replacement for this function. |
| \endlist |
| |
| \section1 Changes to Tools |
| \list |
| \li The \c {qttest_p4.prf} file is removed. Use \c{CONFIG+=testcase} and |
| other flags instead. |
| \li The \c{-dwarf2} configure argument is removed. DWARF2 is always used on \macos now. |
| \li Configure no longer calls \c{qmake -recursive} by default, because the |
| subsequent build invokes qmake as needed. Use \c{-fully-process} to |
| restore the old behavior. |
| \li The \l {Using lupdate}{lupdate} \c CODECFORTR variable is deprecated, because source |
| code written with Qt 5 is expected to use UTF-8 encoding. |
| \endlist |
| |
| \section1 Related Topics |
| \list |
| \li \l{New Classes and Functions in Qt 5.5} |
| \li \l{New Classes and Functions in Qt 5.4} |
| \li \l{New Classes and Functions in Qt 5.3} |
| \li \l{New Classes and Functions in Qt 5.2} |
| \li \l{New Classes and Functions in Qt 5.1} |
| \endlist |
| */ |