Qt4升级到Qt5
QtWidgets作为一个独立的模块
例如编译时错误
- error: QMainWindow: No such file or directory
- error: QToolButton: No such file or directory
- error: QWidget: No such file or directory
解决办法:
在*.pro文件里添加:
- QT += widgets
更改
- #include
为
- #include
程序现在应该就可以运行了,但是有时可能需要更加明确的包含
- #include
QtWebKitWidgets也是一个独立的模块:
例如编译时错误
- error: invalid use of incomplete type 'class QWebFrame'
- error: forward declaration of 'class QWebFrame'
解决办法:
在*.pro文件里添加:
- QT += webkitwidgets
注意:当有QT += webkitwidgets的时候,就不再需要QT += widgets
此外,更改
- #inclue
为
- #include
打印机不工作
如果你的代码有以下几行:
- #include
- #include
将以下内容添加到项目文件中:
- Qt += printsupport
同样,有时可能仍无法正常工作,需要指定:
- #include QPrinter>
- #include QPrintDialog>
toAscii()和fromAscii()已被弃用
替换
- fromAscii()
- toAscii()
为
- fromLatin1()
- toLatin1()
例如,给定的Qt4代码
- QByteArry configfileti = TMP_Config.toAscii();
变为
- QByteArry configfileti = TMP_Config.toLatin1();
QCoreApplication::UnicodeUTF8已被弃用
此枚举类型用于定义8位编码的字符串参数translate()。此枚举现在已经过时,所有的情况将使用UTF-8。所以删除了QCoreApplication::UnicodeUTF8的所有实例。例如:
- 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));
变为
- 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已被弃用
这个类已经过时,在Qt4.3中被替换为QMdiArea。在Qt5中QWorkspace已被删除。新的类与QWorkspace有类似的API,移植只涉及改变几个方法、信号和槽的名字。
更换
- #include
为
- #include
QDrag问题
拖动功能的应用程序将需要一些调整。如:
- QDrag *drag = new QDrag(event->widget());
在Qt5中将产生错误
- error: no matching function for call to 'QDrag::QDrag(QWidget*)'
要解决这个附加组件,其中包括:
- #include
qFindChildren已被弃用
这种方式会弹出一个错误:
- error: 'qFindChildren' was not declared in this scope
为了解决这个问题,将qFindChildren替换为findChildren,例如
- toString(const QObject* obj, int indentLevel) const {
- [...]
- if (m_children) {
- [...]
替换
为
qVariantValue已被弃用
编译器会出现
- error: 'qVariantValue' was not declared in this scope
此功能相当于的QVariant::value(value)。因此,如果指定QVariant val应改写
为
QTime用尖括号括起来,则告知编译器QVariant将返回。但是,如果变量不是一个QVariable,则类型用尖括号括起来就不应该被使用(这样做将导致一个模糊的编译时错误)。所以指定的m_color(QColor类型),应改写
- s.setValue("color/favorite", qVariantValue<</span>QColor>(m_color));
为
- s.setValue("color/favorite", m_color.value());
qVariantCanConvert已被弃用
替换
为
Qt::escape已被弃用
- error: 'escape' is not a member of 'Qt'
所以应该更改下面代码:
为
QDesktopServices::storageLocation已被弃用
- error: 'storageLocation' is not a member of 'QDesktopServices'
- error: 'DataLocation' is not a member of 'QDesktopServices'
使用QStandardPaths::StandardLocation,替换
- QString path = s.value("db.path",QDesktopServices::storageLocation(QDesktopServices::DataLocation)).toString();
为
- QString path = s.value("db.path",QStandardPaths::standardLocations(QStandardPaths::DataLocation)).toString();
QtMutimedia替换了Phonon
CONFIG += qtestlib已被弃用
如果在项目文件中使用,则编译器会发出警告,尽管如此代码将照常运行:
- Project WARNING: CONFIG+=qtestlib is deprecated. Use QT+=testlib instead.
QWeakPointer怪异
如下代码
- quint64 decodedPointer = line.toULongLong();
- MetaData *md = reinterpret_cast<</span>MetaData*>(decodedPointer);
- QWeakPointer<</span>MetaData> wp(md);
结果
- error: no matching function for call to 'QWeakPointer::QWeakPointer(MetaData*&)'
为了解决这个问题,将下面代码添加到项目文件:
- DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
QtConcurrent库的失踪了?
- C:\Qt\Qt5.0.2\5.0.2\mingw47_32\include\QtConcurrent\qtconcurrentthreadengine.h:133: error: undefined reference to `_imp___ZN12QtConcurrent16ThreadEngineBaseD2Ev'
在Qt4中,QtConcurrent是QtCore的一部分,所以,没有必要包括特定的头。这已不再是用Qt5的情况下。如果源代码如下
- m_current = QtConcurrent::blockingMappedReduced(slices, functor, stitchReduce,QtConcurrent::UnorderedReduce );
则将需要包含头:
- #include QtConcurrent>
到项目文件,并添加下面一行:
- LIBS += -lQt5Concurrent
固定的#include <>头
在qtbase/bin/中存在一个“fixqt4headers.pl”这样的Perl脚本。运行于Qt源代码运行,为Qt组件纠正#include <>指令还要考虑模块名称。
插件加载
Q_EXPORT_PLUGIN,Q_EXPORT_PLUGIN2宏已经过时,新的宏为Q_PLUGIN_METADATA。新系统的优点是,它允许Qt来查询元数据的插件没有实际dlopen'ing它。这极大地提高了插件系统的性能和可靠性。
新Q_PLUGIN_METADATA宏包含QObject的派生类中加载插件时返回的Q_OBJECT宏。它包含插件IID并指向一个包含插件元数据的json文件。json文件被编译成插件,并不需要安装。
例如如何改变插件可以通过查找补丁,改变GIF图像格式的插件,请查看:http://qt.gitorious.org/qt/qtbase/commit/963b4c1647299fd023ddbe7c4a25ac404e303c5d.
部署的系统没有使用C++11
当Qt的系统上安装了C++11,建立从源代码的Qt库/框架链接,系统的C++ 11库(libc++)。这意味着Qt库/框架没有部署到没有安装C++11(如out-of-the-box Mac OS X 10.6)的系统。为了能够部署到系统仅支持较旧的C++标准(libstdc++),构建Qt源代码没有C++11配置选项。
原文来自:http://blog.sina.com.cn/s/blog_a6fb6cc90101endy.html
Qt4升级到Qt5的更多相关文章
- 【Qt开发】QT4 升级到 QT5 改动
QT4 升级到 QT5 改动: PC部分: [改 QTDIR 变量] 在工程根目录下找到 .user 文件 , 如 InnoTabPlugin.vcxproj.user 修改指向你的 QT5 根目录 ...
- qt4升级到qt5的一些问题
由于最近项目使用的qt版本从qt4.8升级到qt5.5,虽然从4到5的变化不大,不过还是有许多的问题需要记录一下,希望可以帮助到更多的人 1.由于Qt5将大部分桌面部件移到了Qt Widgets模块 ...
- QT4项目升级到QT5遇到的问题和解决方法
QT4升级到QT5改动: PC部分: [改QTDIR变量] 在工程根目录下找到.user文件, 如InnoTabPlugin.vcxproj.user 修改指向你的QT5根目录: <Proper ...
- 将某个Qt4项目升级到Qt5遇到的问题[转]
该Qt4项目以前是使用Qt4.7.4 MSVC2008开发的,因为使用到了OWC10(Office Web Components),使用MSVC编译器的话无法正常升级到Qt4.8.x和Qt5,于是将编 ...
- Qt4升级Qt5注意问题
Qt4升级Qt5注意问题 Qt4过渡到Qt5的项目一开始就受阻,记录一下遇到的下面的问题 --->编译遇到类似错误: error: QCalendarWidget: No such file o ...
- [转]将某个Qt4项目升级到Qt5遇到的问题
原文:http://hi.baidu.com/xchinux/item/9044d8ce986accbb0d0a7b87晚上花了4个小时,将以前的一个项目从Qt 4.8.4-MinGW升级到了Qt5. ...
- 将某个Qt4项目升级到Qt5遇到的问题(13条方法)
本文转载自http://hi.baidu.com/xchinux/item/9044d8ce986accbb0d0a7b87 一.将某个QT4项目改成QT5遇到的问题 该Qt4项目以前是使用Qt4.7 ...
- 将某个Qt4项目升级到Qt5遇到的问题
本文转载自http://hi.baidu.com/xchinux/item/9044d8ce986accbb0d0a7b87 一.将某个QT4项目改成QT5遇到的问题 该Qt4项目以前是使用Qt4.7 ...
- ubuntu同时安装qt4.8和qt5.7
这是ubuntu默认安装(从apt安装)的路径和相关文件,建议编译安装到/opt目录下,使用./configure --prefix=/opt/Qt4.8 /usr/share/qt4 /usr/sh ...
随机推荐
- ios基础篇(一)——UIView控件基本属性与常见用法
1.frame 控件的位置和尺寸(以父控件的左上角为坐标原点(0,0)) 2.center 控件的中点(以父控件的左上角为坐标原点) 3.bounds 控件的位置和尺寸(以自己的左上角为坐标原点(0, ...
- "LC.exe" exited with code -1 错误
当打开一个VS程序时出现"LC.exe" exited with code -1错误,解决方法是: 删除licenses.licx文件即可
- java入门第一步之完成jdk的安装(window)【转】
为了面向更多的人类,我决定重温我的java起步: 要进行java开发第一步就是进行java环境的安装,也就是jdk的按装: 1.由于java被oracle收购了,我们下载jdk也就去oracle的官网 ...
- [转]Windows的窗口刷新机制
1.Windows的窗口刷新管理 窗口句柄(HWND)都是由操作系统内核管理的,系统内部有一个z-order序列,记录着当前窗口从屏幕底部(假象的从屏幕到眼睛的方向),到屏幕最高层的一个窗口句柄的排序 ...
- qml 一些知识点
1.pagestack进行页面调整的时候,需要对页面状态做一些跟踪: Stack.onStatusChanged: { if (Stack.status == Stack.Active) { //可以 ...
- java.lang.ThreadGroup.enumerate
java.lang.ThreadGroup.enumerate(Thread[] list) 方法复制该线程组及其子组中的所有活动线程到指定的数组. 声明 以下是java.lang.ThreadGro ...
- 最简单的PHP socket echo server。
常有人困惑php的socket服务,现在有libevent和多线程了,但是我还是整一个select的 <?php $addr = '0.0.0.0'; $port = 1234; $socket ...
- 使用read write 读写socket
一旦,我们建立好了tcp连接之后,我们就可以把得到的fd当作文件描述符来使用. 由此网络程序里最基本的函数就是read和write函数了. 写函数: ssize_t write(int fd, con ...
- jstl c:choose>、<c:when>和<c:otherwise>标签
<c:choose>.<c:when>和<c:otherwise>在一起连用,可以实现Java语言中的if-else语句的功能.例如以下代码根据username请求 ...
- 多线程同步内功心法——PV操作上(未完待续。。。)
阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...