找回密码
 立即注册
收起左侧

关于QT5中QPrinter的问题(随书代码5-9)

2
回复
21350
查看
[复制链接]

尚未签到

来源: 2013-3-29 17:37:11 显示全部楼层 |阅读模式
1Qter豆
最近在看《Qt Creator快速入门》一书,我用的最新的Qt5.0,在移植随书工程的时候,发现5-9工程中关于打印机的内容编译出错,出错代码为:
  1. debug/mainwindow.o: In function `ZN10MainWindow7doPrintEv':
  2. F:\HYQ_F\Projects\Qt\src\05\5-9\myPrint-build-Desktop_Qt_5_0_1_MinGW_32bit-Debug/../myPrint/mainwindow.cpp:35: undefined reference to `_imp___ZN8QPrinterC1ENS_11PrinterModeE'
  3. F:\HYQ_F\Projects\Qt\src\05\5-9\myPrint-build-Desktop_Qt_5_0_1_MinGW_32bit-Debug/../myPrint/mainwindow.cpp:37: undefined reference to `_imp___ZN12QPrintDialogC1EP8QPrinterP7QWidget'
  4. F:\HYQ_F\Projects\Qt\src\05\5-9\myPrint-build-Desktop_Qt_5_0_1_MinGW_32bit-Debug/../myPrint/mainwindow.cpp:41: undefined reference to `_imp___ZN20QAbstractPrintDialog16addEnabledOptionENS_17PrintDialogOptionE'
  5. F:\HYQ_F\Projects\Qt\src\05\5-9\myPrint-build-Desktop_Qt_5_0_1_MinGW_32bit-Debug/../myPrint/mainwindow.cpp:44: undefined reference to `_imp___ZN12QPrintDialog4execEv'
  6. F:\HYQ_F\Projects\Qt\src\05\5-9\myPrint-build-Desktop_Qt_5_0_1_MinGW_32bit-Debug/../myPrint/mainwindow.cpp:46: undefined reference to `_imp___ZN12QPrintDialogD1Ev'
  7. F:\HYQ_F\Projects\Qt\src\05\5-9\myPrint-build-Desktop_Qt_5_0_1_MinGW_32bit-Debug/../myPrint/mainwindow.cpp:46: undefined reference to `_imp___ZN8QPrinterD1Ev'
  8. F:\HYQ_F\Projects\Qt\src\05\5-9\myPrint-build-Desktop_Qt_5_0_1_MinGW_32bit-Debug/../myPrint/mainwindow.cpp:46: undefined reference to `_imp___ZN12QPrintDialogD1Ev'
  9. F:\HYQ_F\Projects\Qt\src\05\5-9\myPrint-build-Desktop_Qt_5_0_1_MinGW_32bit-Debug/../myPrint/mainwindow.cpp:46: undefined reference to `_imp___ZN8QPrinterD1Ev'
复制代码



因为Qt5  QPrinter文件目录的改变,我修改了mainwindows.cpp中开头包含文件的路径,具体为:
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QtPrintSupport/QPrinter>
  4. #include <QtPrintSupport/QPrintDialog>
  5. #include <QtPrintSupport/QPrintPreviewDialog>
  6. #include <QFileDialog>
  7. #include <QFileInfo>
复制代码
同时修改了mainwindows.h,添加了前向声明,具体为:
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H

  3. #include <QMainWindow>
  4. class QPrinter;
  5. namespace Ui {
  6.     class MainWindow;
  7. }
复制代码
由于Qt5的兼容性,在.pro中添加了兼容4版本的声明,具体为:
  1. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
复制代码
现在编译的时候还是有错误提示,不知道怎么修改了,望版主解答,万分感谢!
我已将我修改后的附件打包上传。

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

在.pro文件中添加下面一行代码: qtHaveModule(printsupport): QT += printsupport 就可以了,头文件不需要改。这是因为Qt 5中将所有打印的相关类都放到了Qt Print Support模块造成的。 这里有个建议就是,如果是初学者,没有必要用Qt 5来学习Qt 4的内容,虽然官方一直说Qt 4程序可以很容易移植到Qt 5,不过对于初学者而言,学习知识是最重要的,而不是浪费时间来搞环境。因为大家对很多东西还不是很了解,Qt 4已经够庞杂了,如 ...
参与人数 1人气 +2 收起 理由
Qter_lv + 2

查看全部评分总评分 : 人气 +2

回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-3-29 17:37:12 显示全部楼层
在.pro文件中添加下面一行代码:

qtHaveModule(printsupport): QT += printsupport

就可以了,头文件不需要改。这是因为Qt 5中将所有打印的相关类都放到了Qt Print Support模块造成的。

这里有个建议就是,如果是初学者,没有必要用Qt 5来学习Qt 4的内容,虽然官方一直说Qt 4程序可以很容易移植到Qt 5,不过对于初学者而言,学习知识是最重要的,而不是浪费时间来搞环境。因为大家对很多东西还不是很了解,Qt 4已经够庞杂了,如果再和Qt 5掺和一起,我想,大家又会迷茫了,不知Qt如何学起了。

如果是学习《Qt Creator快速入门》,还是建议下载书中使用的Qt和Qt Creator版本来学习,这样可以很快完成学习任务,尽量避免出错。等自己已经有了一定的知识积累之后,并且是需要使用到高级版本的Qt的功能的时候,再去使用新版本的Qt。

很多公司现在还在用Qt 2,Qt 3呢,所以说不是最新的就是最好的。还是那句话,适合的东西才是最好的。这里不是说Qt 5不好,只是,毕竟它跟Qt 4的框架都不同了,如果我们用不到它的新功能,而只是为了学习Qt编程,那么现在没必要用它。等我们掌握好Qt 4以后,了解了它的框架,然后再去学习Qt 5,这样只需要花费很少的时间来查看两者的区别即可,大体程序还是一样的。
参与人数 1人气 +2 收起 理由
hooky408 + 2

查看全部评分总评分 : 人气 +2

回复

使用道具 举报

尚未签到

2013-3-29 21:40:08 显示全部楼层
yafeilinux 发表于 2013-3-29 20:39
在.pro文件中添加下面一行代码:

qtHaveModule(printsupport): QT += printsupport

感谢版主解答,按照方法已经解决了问题,嗯,我用QT5是因为官方集成了所以得工具,一键安装就可以,所以就懒的下4.8,我会考虑换4+版本的,多谢!

点评

请修改一下主题的状态,设置为已解决。  发表于 2013-3-29 23:37
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了