EnArBgDeElEsFaFiFrHiHuItJaKnKoMsNlPlPtRuSqThTrUkZh
The transition from Qt 4.x to Qt 5 is not expected to be significant. However, the 'modularization' of the Qt code base requires some amount of changes to project configuration, such as use of 'headers', and configuration of project build settings (such as changes to the *.pro files).
- 1QtWidgets as a Separate Module
- 2QtWebKitWidgets is also a separate module:
- The KitchenAid Pro 5 Plus 5 Quart Bowl-Lift Stand Mixer is perfect for heavy, dense mixtures. It offers the capacity to make up to 9 dozen cookies in a single batch and 10 speeds to thoroughly mix, knead and whip ingredients quickly and easily. For even more versatility, use the power hub to turn your stand mixer into a culinary center, with.
- Free shipping on orders of $35+ from Target. Read reviews and buy Prepworks 1.5qt Prokeeper Brown Sugar Container at Target. Get it today with Same Day Delivery, Order Pickup or Drive Up.
Goldlion Lid Stand Silicone Lid Holder Accessories Compatible with Ninja Foodi Pressure Cooker and Air Fryer 5 Qt, 6.5 Qt and 8 Quart, Orange 4.8 out of 5 stars 1,923 $13.99 $ 13. 99 $16.99 $16.99. Ninja ® Foodi ™ Pro 5-in-1 Indoor Grill with Integrated Smart Probe, 4-Quart Air Fryer. AG400 Getting started. FAQs & general information Product setup & how to use Product specs. Product resources. Warranty & manuals Replacement. WMF Perfect Plus 4.5 Quart Pressure Cooker. $40.00 6d 12h +$55.95 shipping. Make Offer - WMF Perfect Plus 4.5 Quart Pressure Cooker.
QtWidgets as a Separate Module
example compile time errors
error: QMainWindow: No such file or directoryerror: QToolButton: No such file or directoryerror: QWidget: No such file or directory
Solution
Add this in your *.pro file:
QT += widgets
Change all instances of
- include <QtGui>
to
- include <QtWidgets>
The code should work now, though sometimes you may require to be more explicit:
- include <QtWidgets/QToolButton>
QtWebKitWidgets is also a separate module:
example compile time errors
Anymp4 mac video converter ultimate 8 2 18 minutes.
error: invalid use of incomplete type 'class QWebFrame'error: forward declaration of 'class QWebFrame'
Solution
Add this in your *.pro file:
QT += webkitwidgets
Note: when you have QT += webkitwidgets you don't need QT += widgets
In addition, replace all instances of
- include <QtWebKit>
to
- include <QtWebKitWidgets>
You can try this by porting a WYSISWYG html editor from Qt 4 to Qt 5.
QPrinter Doesn't Work
If your code has the following lines:
- include <QPrinter>
- include <QPrintDialog>
add the following to your project file:
QT += printsupport
Again, sometimes it may not work and you would need to be explicit:
- include <QtPrintSupport/QPrinter>
- include <QtPrintSupport/QPrintDialog>
toAscii() and fromAscii() Methods are deprecated
Replace all instances of
fromAscii()toAscii()
to
fromLatin1()toLatin1()
For example, given the Qt 4 code
QByteArray configfileti = TMP_Config.toAscii();
you would change to
QByteArray configfileti = TMP_Config.toLatin1();
QCoreApplication::UnicodeUTF8 is deprecated
This enum type used to define the 8-bit encoding of character string arguments to translate(). This enum is now obsolete and UTF-8 will be used in all cases. So remove all instances of QCoreApplication::UnicodeUTF8. For example:
Href_Gui->setWindowTitle(QApplication::translate('Href_Gui', 'Url / www', 0, QApplication::UnicodeUTF8));label->setText(QApplication::translate('Href_Gui', 'Text:', 0, QApplication::UnicodeUTF8));label_2->setText(QApplication::translate('Href_Gui', 'Url:', 0, QApplication::UnicodeUTF8));label_3->setText(QApplication::translate('Href_Gui', 'Target / Name:', 0, QApplication::UnicodeUTF8));
to
Href_Gui->setWindowTitle(QApplication::translate('Href_Gui', 'Url / www', 0));label->setText(QApplication::translate('Href_Gui', 'Text:', 0));label_2->setText(QApplication::translate('Href_Gui', 'Url:', 0));label_3->setText(QApplication::translate('Href_Gui', 'Target / Name:', 0));
QWorkspace is deprecated
This class is obsolete and was replaced by the QMdiArea class in Qt 4.3. In Qt 5 QWorkspace has been removed. The new class has a similar API to QWorkspace and porting it only involved changing the names of a few methods, signals, and slots.
replace
#include <QWorkspace>
with
#include <QMdiArea>
QDrag Problems
Apps that have drop and drag functionality will need some tweaking. A line such as
QDrag *drag = new QDrag(event->widget());
in Qt 5 will generate the error Up uploader for instagram 3 7 download free.
error: no matching function for call to 'QDrag::QDrag(QWidget*)'
To fix this add among the includes:
- include <QWidget>
qFindChildren is deprecated
An error will pop of this fashion:
error: 'qFindChildren' was not declared in this scope
To solve this you replace qFindChildren with findChildren, for example in
toString(const QObject* obj, int indentLevel) const {[…]
[…]
replace
QList<QObject*> childlist = qFindChildren<QObject*>(obj, QString());
with
QList<QObject*> childlist = obj->findChildren<QObject*>(QString());
source
qInstallMsgHandler is deprecated
The 4.8 function qInstallMsgHandler has been replaced with qInstallMessageHandler. The functions are similar, but the function signature of the `handler` has also changed, adding a very useful QMessageLogContext and replacing the char array with a QString reference.
Your compiler will complain
error: 'qInstallMsgHandler': identifier not found
so replace
void myhandler(QtMsgType type, const char* msg) {
}
int main(int argc, char** argv) {
}
with
void myhandler(QtMsgType type, const QMessageLogContext& context, const QString& msg) { //<-- new signature! added context!
}
int main(int argc, char** argv) {
}
qVariantValue is deprecated
Your compiler will say
error: 'qVariantValue' was not declared in this scope
This function is equivalent to QVariant::value<T>(value). Therefore if given a QVariant val rewrite the line
QTime t = qVariantValue<QTime>(val);
to
QTime t = val.value<QTime>();
This QTime enclosed in the angled brackets lets the compiler know what QVariant will return. However, if the variable is not a QVariable the type enclosed in the angled brackets should not be used(doing so will result in a vague compile time error). So given that m_color is of type QColor you will rewrite
s.setValue('color/favorite', qVariantValue<QColor>(m_color));
to
s.setValue('color/favorite', m_color.value());
qVariantCanConvert is deprecated
replace
Q_ASSERT(qVariantCanConvert<QString>(variant));Q_ASSERT(qVariantCanConvert<QSize>(variant));Q_ASSERT(qVariantCanConvert<QFont>(fontVariant));
with
Q_ASSERT(variant.canConvert(QMetaType::QString));Q_ASSERT(variant.canConvert(QMetaType::QSize));Q_ASSERT(fontVariant.canConvert(QMetaType::QFont));
Qt::escape is deprecated
error: 'escape' is not a member of 'Qt'
So you would change the following block:
if (result QString())
else
return result;
to
if (result QString())
else
return result;
this procedure can be automated by a porting tool from KDAB.
QDesktopServices::storageLocation deprecated
error: 'storageLocation' is not a member of 'QDesktopServices'error: 'DataLocation' is not a member of 'QDesktopServices'
Use QStandardPaths::StandardLocation:
QString path = s.value('db.path', QDesktopServices::storageLocation(QDesktopServices::DataLocation)).toString();
to
QString path = s.value('db.path', QStandardPaths::standardLocations(QStandardPaths::DataLocation)).toString();
CONFIG+=qtestlib is deprecated
If you have the above line in your project file the compiler will warn you in the compile window, nonetheless the code will still run as usual:
Project WARNING: CONFIG+=qtestlib is deprecated. Use QT+=testlib instead.
QWeakPointer quirks
A code block like
quint64 decodedPointer = line.toULongLong();MetaData* md = reinterpret_cast<MetaData*>(decodedPointer);QWeakPointer<MetaData> wp(md);
results in
error: no matching function for call to 'QWeakPointer<MetaData>::QWeakPointer(MetaData*&)'
To fix this add to the project file:
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
QtConcurrent Library is Missing?
C:Qt5.0.25.0.2mingw47_32includeQtConcurrentqtconcurrentthreadengine.h:133: error: undefined reference to `_imp___ZN12QtConcurrent16ThreadEngineBaseD2Ev'
In Qt 4, QtConcurrent was part of QtCore, so there was no need to include specific headers. This is no longer the case with Qt 5. If your source code has lines like
m_current = QtConcurrent::blockingMappedReduced(slices, functor, stitchReduce, QtConcurrent::UnorderedReduce );
You will need to include the header:
- include <QtConcurrent/QtConcurrent>
and add the following line to your project file:
QT+= concurrent
Fixing #include<> Headers
A Perl script 'fixqt4headers.pl' exists in qtbase/bin/. that should be run on source code using Qt that corrects the #include<> directives for Qt components to also consider the module name.
Plugin loading
The Q_EXPORT_PLUGIN,Q_EXPORT_PLUGIN2 macros have been deprecated in favor of the new Q_PLUGIN_METADATA macro. The advantage of the new system is that it allows Qt to query the metadata for the plugin without actually dlopen'ing it. This greatly improves performance and reliability of the plugin system.
The new Q_PLUGIN_METADATA macro is included next to the Q_OBJECT macro in the QObject derived class that is returned when loading the plugin. It contains the plugins IID and a filename pointing to a json file containing the metadata for the plugin. The json file is compiled into the plugin and does not need to be installed.
An example on how to change your plugins can be found by looking at the patch that changes the Gif image format plugin, see http://code.qt.io/cgit/qt/qtbase.git/commit/?id=963b4c1647299fd023ddbe7c4a25ac404e303c5d
Deploying to systems without C++11
When Qt is built from source code on a system with C++11 installed, the Qt libraries/frameworks are linked against the system's C++11 library (libc). This means that the Qt libraries/frameworks are not deployable to systems without C++11 installed (such as out-of-the-box Mac OS X 10.6). To be able to deploy to systems that only support the older C++ standard (libstdc++), build Qt from source code with the -no-c++11 configure option.
QTimer is no longer accurate to the millisecond by default
QTimer has now 3 accuracy types, with a new default behaviour:
- The new default type is Qt::CoarseTimer which, to reduce power/CPU consumption, allow 5% difference between requested time and actual one, and even allow the timer to fire before the requested time.
- The former one is Qt::PreciseTimer (to the millisecond, never before the requested time).
- A third one is Qt::VeryCoarseTimer and allow a 1 second difference
QUrl addQueryItem moved to QUrlQuery
If you have:
QUrl url;// …url.addQueryItem(key, value);
You will want to change it to
QUrl url;QUrlQuery urlQuery(url); //initialize with url to append to existing query, if present// …urlQuery.addQueryItem(key, value);
url.setQuery(urlQuery);
The same applies to the QUrl::getQueryItem() methods. They have been moved to QUrlQuery.
QAbstractItemModel changes
void reset()void setRoleNames(const QHash<int, QByteArray> & roleNames)
both have changed and are now obsolete.See Obsolete Members for QAbstractItemModel
QHeaderView changes
Use
void QHeaderView::setSectionResizeMode(QHeaderView::ResizeMode mode)
instead of void QHeaderView::setResizeMode(ResizeMode mode)
The latter has been removed.Recommended Reading
Retrieved from 'https://wiki.qt.io/index.php?title=Transition_from_Qt_4.x_to_Qt5&oldid=36969'
EnArBgDeElEsFaFiFrHiHuItJaKnKoMsNlPlPtRuSqThTrUkZh
The transition from Qt 4.x to Qt 5 is not expected to be significant. However, the 'modularization' of the Qt code base requires some amount of changes to project configuration, such as use of 'headers', and configuration of project build settings (such as changes to the *.pro files).
- 1QtWidgets as a Separate Module
- 2QtWebKitWidgets is also a separate module:
QtWidgets as a Separate Module
example compile time errors
error: QMainWindow: No such file or directoryerror: QToolButton: No such file or directoryerror: QWidget: No such file or directory
Solution
Add this in your *.pro file:
QT += widgets
Change all instances of
- include <QtGui>
to
- include <QtWidgets>
The code should work now, though sometimes you may require to be more explicit:
- include <QtWidgets/QToolButton>
QtWebKitWidgets is also a separate module:
example compile time errors
error: invalid use of incomplete type 'class QWebFrame'error: forward declaration of 'class QWebFrame'
Solution
Add this in your *.pro file:
QT += webkitwidgets
Note: when you have QT += webkitwidgets you don't need QT += widgets
In addition, replace all instances of
- include <QtWebKit>
to
- include <QtWebKitWidgets>
You can try this by porting a WYSISWYG html editor from Qt 4 to Qt 5.
QPrinter Doesn't Work
If your code has the following lines:
- include <QPrinter>
- include <QPrintDialog>
add the following to your project file:
QT += printsupport
Again, sometimes it may not work and you would need to be explicit:
- include <QtPrintSupport/QPrinter>
- include <QtPrintSupport/QPrintDialog>
toAscii() and fromAscii() Methods are deprecated
Replace all instances of
fromAscii()toAscii()
to
fromLatin1()toLatin1()
For example, given the Qt 4 code
QByteArray configfileti = TMP_Config.toAscii();
you would change to
QByteArray configfileti = TMP_Config.toLatin1();
QCoreApplication::UnicodeUTF8 is deprecated
This enum type used to define the 8-bit encoding of character string arguments to translate(). This enum is now obsolete and UTF-8 will be used in all cases. So remove all instances of QCoreApplication::UnicodeUTF8. For example:
Href_Gui->setWindowTitle(QApplication::translate('Href_Gui', 'Url / www', 0, QApplication::UnicodeUTF8));label->setText(QApplication::translate('Href_Gui', 'Text:', 0, QApplication::UnicodeUTF8));label_2->setText(QApplication::translate('Href_Gui', 'Url:', 0, QApplication::UnicodeUTF8));label_3->setText(QApplication::translate('Href_Gui', 'Target / Name:', 0, QApplication::UnicodeUTF8));
to
Href_Gui->setWindowTitle(QApplication::translate('Href_Gui', 'Url / www', 0));label->setText(QApplication::translate('Href_Gui', 'Text:', 0));label_2->setText(QApplication::translate('Href_Gui', 'Url:', 0));label_3->setText(QApplication::translate('Href_Gui', 'Target / Name:', 0));
QWorkspace is deprecated
This class is obsolete and was replaced by the QMdiArea class in Qt 4.3. In Qt 5 QWorkspace has been removed. The new class has a similar API to QWorkspace and porting it only involved changing the names of a few methods, signals, and slots.
replace
#include <QWorkspace>
with
#include <QMdiArea>
QDrag Problems
Apps that have drop and drag functionality will need some tweaking. A line such as
QDrag *drag = new QDrag(event->widget());
in Qt 5 will generate the error
error: no matching function for call to 'QDrag::QDrag(QWidget*)'
To fix this add among the includes:
- include <QWidget>
qFindChildren is deprecated
An error will pop of this fashion:
error: 'qFindChildren' was not declared in this scope
To solve this you replace qFindChildren with findChildren, for example in
toString(const QObject* obj, int indentLevel) const {[…]
[…]
replace
QList<QObject*> childlist = qFindChildren<QObject*>(obj, QString());
with
QList<QObject*> childlist = obj->findChildren<QObject*>(QString());
source
qInstallMsgHandler is deprecated
The 4.8 function qInstallMsgHandler has been replaced with qInstallMessageHandler. The functions are similar, but the function signature of the `handler` has also changed, adding a very useful QMessageLogContext and replacing the char array with a QString reference.
Your compiler will complain
error: 'qInstallMsgHandler': identifier not found
so replace
void myhandler(QtMsgType type, const char* msg) {
}
int main(int argc, char** argv) {
}
with
void myhandler(QtMsgType type, const QMessageLogContext& context, const QString& msg) { //<-- new signature! added context!
}
int main(int argc, char** argv) {
}
Mininote Pro 5 4 Quart Measuring Cup
qVariantValue is deprecated
Your compiler will say
error: 'qVariantValue' was not declared in this scope
This function is equivalent to QVariant::value<T>(value). Therefore if given a QVariant val rewrite the line
QTime t = qVariantValue<QTime>(val);
to
QTime t = val.value<QTime>();
This QTime enclosed in the angled brackets lets the compiler know what QVariant will return. However, if the variable is not a QVariable the type enclosed in the angled brackets should not be used(doing so will result in a vague compile time error). So given that m_color is of type QColor you will rewrite
s.setValue('color/favorite', qVariantValue<QColor>(m_color));
to
s.setValue('color/favorite', m_color.value());
qVariantCanConvert is deprecated
replace
Q_ASSERT(qVariantCanConvert<QString>(variant));Q_ASSERT(qVariantCanConvert<QSize>(variant));Q_ASSERT(qVariantCanConvert<QFont>(fontVariant));
with
Q_ASSERT(variant.canConvert(QMetaType::QString));Q_ASSERT(variant.canConvert(QMetaType::QSize));Q_ASSERT(fontVariant.canConvert(QMetaType::QFont));
Qt::escape is deprecated
error: 'escape' is not a member of 'Qt'
So you would change the following block:
if (result QString())
else
return result;
to
if (result QString())
else
return result;
this procedure can be automated by a porting tool from KDAB.
QDesktopServices::storageLocation deprecated
error: 'storageLocation' is not a member of 'QDesktopServices'error: 'DataLocation' is not a member of 'QDesktopServices'
Use QStandardPaths::StandardLocation:
QString path = s.value('db.path', QDesktopServices::storageLocation(QDesktopServices::DataLocation)).toString();
to
QString path = s.value('db.path', QStandardPaths::standardLocations(QStandardPaths::DataLocation)).toString();
CONFIG+=qtestlib is deprecated
If you have the above line in your project file the compiler will warn you in the compile window, nonetheless the code will still run as usual:
Project WARNING: CONFIG+=qtestlib is deprecated. Use QT+=testlib instead.
QWeakPointer quirks
A code block like
quint64 decodedPointer = line.toULongLong();MetaData* md = reinterpret_cast<MetaData*>(decodedPointer);QWeakPointer<MetaData> wp(md);
results in
error: no matching function for call to 'QWeakPointer<MetaData>::QWeakPointer(MetaData*&)'
To fix this add to the project file:
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
QtConcurrent Library is Missing?
C:Qt5.0.25.0.2mingw47_32includeQtConcurrentqtconcurrentthreadengine.h:133: error: undefined reference to `_imp___ZN12QtConcurrent16ThreadEngineBaseD2Ev'
In Qt 4, QtConcurrent was part of QtCore, so there was no need to include specific headers. This is no longer the case with Qt 5. If your source code has lines like
m_current = QtConcurrent::blockingMappedReduced(slices, functor, stitchReduce, QtConcurrent::UnorderedReduce );
You will need to include the header:
- include <QtConcurrent/QtConcurrent>
and add the following line to your project file:
QT+= concurrent
Fixing #include<> Headers
A Perl script 'fixqt4headers.pl' exists in qtbase/bin/. that should be run on source code using Qt that corrects the #include<> directives for Qt components to also consider the module name.
Plugin loading
The Q_EXPORT_PLUGIN,Q_EXPORT_PLUGIN2 macros have been deprecated in favor of the new Q_PLUGIN_METADATA macro. The advantage of the new system is that it allows Qt to query the metadata for the plugin without actually dlopen'ing it. This greatly improves performance and reliability of the plugin system.
The new Q_PLUGIN_METADATA macro is included next to the Q_OBJECT macro in the QObject derived class that is returned when loading the plugin. It contains the plugins IID and a filename pointing to a json file containing the metadata for the plugin. The json file is compiled into the plugin and does not need to be installed.
An example on how to change your plugins can be found by looking at the patch that changes the Gif image format plugin, see http://code.qt.io/cgit/qt/qtbase.git/commit/?id=963b4c1647299fd023ddbe7c4a25ac404e303c5d
Deploying to systems without C++11
When Qt is built from source code on a system with C++11 installed, the Qt libraries/frameworks are linked against the system's C++11 library (libc). This means that the Qt libraries/frameworks are not deployable to systems without C++11 installed (such as out-of-the-box Mac OS X 10.6). To be able to deploy to systems that only support the older C++ standard (libstdc++), build Qt from source code with the -no-c++11 configure option.
QTimer is no longer accurate to the millisecond by default
QTimer has now 3 accuracy types, with a new default behaviour:
- The new default type is Qt::CoarseTimer which, to reduce power/CPU consumption, allow 5% difference between requested time and actual one, and even allow the timer to fire before the requested time.
- The former one is Qt::PreciseTimer (to the millisecond, never before the requested time).
- A third one is Qt::VeryCoarseTimer and allow a 1 second difference
QUrl addQueryItem moved to QUrlQuery
If you have:
QUrl url;// …url.addQueryItem(key, value);
You will want to change it to
QUrl url;QUrlQuery urlQuery(url); //initialize with url to append to existing query, if present// …urlQuery.addQueryItem(key, value);
url.setQuery(urlQuery);
The same applies to the QUrl::getQueryItem() methods. They have been moved to QUrlQuery.
QAbstractItemModel changes
void reset()void setRoleNames(const QHash<int, QByteArray> & roleNames)
both have changed and are now obsolete.Mininote Pro 5 4 Quart Stock Pot
See Obsolete Members for QAbstractItemModel
QHeaderView changes
Use
void QHeaderView::setSectionResizeMode(QHeaderView::ResizeMode mode)
instead of void QHeaderView::setResizeMode(ResizeMode mode)
The latter has been removed.Recommended Reading
Retrieved from 'https://wiki.qt.io/index.php?title=Transition_from_Qt_4.x_to_Qt5&oldid=36969'