请教 QT5.2打印 页面设置无效

Babyboymanold 2017-08-18 10:13:20
请教各位:

环境:QT5.2、 Windows平台、 网络打印机

问题:
1,使用QPageSetupDialog可以修改页面方向,却不能修改其他页面信息?
2:在QPageSetupDialog中选择其他尺寸的纸张时程序崩溃,为什么?如何获取打印机支持哪些纸张?

源码:
void MainWindow::on_btn_page_setup_clicked()
{
qreal left, top, right, bottom;

qDebug() << m_printer.printerName() << __FILE__ << __LINE__; //m_printer为头文件中定义的私有成员,只在本函数调用
qDebug() << m_printer.supportedPaperSources() << __FILE__ << __LINE__;
qDebug() << m_printer.supportedResolutions() << __FILE__ << __LINE__;
qDebug() << m_printer.orientation() << __FILE__ << __LINE__;
qDebug() << m_printer.fullPage() << __FILE__ << __LINE__;
qDebug() << m_printer.paperName() << __FILE__ << __LINE__;

qDebug() << QString("确定前默认为A4");
qDebug() << m_printer.paperSize() << __FILE__ << __LINE__; //0/A4
qDebug() << m_printer.paperRect() << __FILE__ << __LINE__;
qDebug() << m_printer.pageRect() << __FILE__ << __LINE__;
m_printer.getPageMargins(&left, &top, &right, &bottom, QPrinter::Millimeter);
qDebug() << left << top << right << bottom << __FILE__ << __LINE__;

QPageSetupDialog pageSetUpdlg(&m_printer, this);
if (pageSetUpdlg.exec() == QDialog::Accepted)
{
qDebug() << QString("按下确定");
qDebug() << m_printer.printerName() << __FILE__ << __LINE__;
qDebug() << m_printer.supportedPaperSources() << __FILE__ << __LINE__;
qDebug() << m_printer.supportedResolutions() << __FILE__ << __LINE__;
qDebug() << m_printer.orientation() << __FILE__ << __LINE__;
qDebug() << m_printer.fullPage() << __FILE__ << __LINE__;
QString strPaperName = m_printer.paperName();
qDebug() << strPaperName << __FILE__ << __LINE__; //
//m_printer.setPaperName(strPaperName);

qDebug() << QString("确定后");
qDebug() << m_printer.paperSize() << __FILE__ << __LINE__; //30/Custom
qDebug() << m_printer.paperRect() << __FILE__ << __LINE__;
qDebug() << m_printer.pageRect() << __FILE__ << __LINE__;
m_printer.getPageMargins(&left, &top, &right, &bottom, QPrinter::Millimeter);
qDebug() << left << top << right << bottom << __FILE__ << __LINE__;

//The page size can also be specified in millimeters using setPageSizeMM(). In this case the page size enum is set to Custom.
qDebug() << QString("确定后用setPaperSize()设置A4");
m_printer.setPaperSize(QPrinter::A4);
qDebug() << m_printer.paperSize() << __FILE__ << __LINE__; //0/A4
qDebug() << m_printer.paperRect() << __FILE__ << __LINE__;
qDebug() << m_printer.pageRect() << __FILE__ << __LINE__;
m_printer.getPageMargins(&left, &top, &right, &bottom, QPrinter::Millimeter);
qDebug() << left << top << right << bottom << __FILE__ << __LINE__;
}
else
{
qDebug() << QString("按下取消");
qDebug() << m_printer.printerName() << __FILE__ << __LINE__;
qDebug() << m_printer.supportedPaperSources() << __FILE__ << __LINE__;
qDebug() << m_printer.supportedResolutions() << __FILE__ << __LINE__;
qDebug() << m_printer.orientation() << __FILE__ << __LINE__;
qDebug() << m_printer.fullPage() << __FILE__ << __LINE__;
qDebug() << m_printer.paperName() << __FILE__ << __LINE__; //

qDebug() << QString("取消后");
qDebug() << m_printer.paperSize() << __FILE__ << __LINE__; //0/A4
qDebug() << m_printer.paperRect() << __FILE__ << __LINE__;
qDebug() << m_printer.pageRect() << __FILE__ << __LINE__;
m_printer.getPageMargins(&left, &top, &right, &bottom, QPrinter::Millimeter);
qDebug() << left << top << right << bottom << __FILE__ << __LINE__;

//The page size can also be specified in millimeters using setPageSizeMM(). In this case the page size enum is set to Custom.
qDebug() << QString("取消后用setPageSizeMM()设置A4");
m_printer.setPageSizeMM(QSizeF(210, 297));
qDebug() << m_printer.paperSize() << __FILE__ << __LINE__; //30/Custom
qDebug() << m_printer.paperRect() << __FILE__ << __LINE__;
qDebug() << m_printer.pageRect() << __FILE__ << __LINE__;
m_printer.getPageMargins(&left, &top, &right, &bottom, QPrinter::Millimeter);
qDebug() << left << top << right << bottom << __FILE__ << __LINE__;
}

//qt如何获取打印机支持的纸张大小,设置A6纸时崩溃
//QPrinter::A4 0 210 x 297 mm, 8.26 x 11.69 inches
}


图片:


输出:
1,按确定按钮输出:
引用
Starting E:\ProjectsQt\build-QtPrint-Desktop_Qt_5_2_0_MinGW_32bit-Release\release\QtPrint.exe...
"\\10.10.100.120\PRINTER-RD" ..\QtPrint\mainwindow.cpp 357
(6, 257, 258, 259, 260, 1000, 3) ..\QtPrint\mainwindow.cpp 358
(600, 1200) ..\QtPrint\mainwindow.cpp 359
0 ..\QtPrint\mainwindow.cpp 360
false ..\QtPrint\mainwindow.cpp 361
"A4" ..\QtPrint\mainwindow.cpp 362
"确定前默认为A4"
0 ..\QtPrint\mainwindow.cpp 365
QRect(0,0 794x1122) ..\QtPrint\mainwindow.cpp 366
QRect(16,16 762x1090) ..\QtPrint\mainwindow.cpp 367
4.23001 4.23001 4.23001 4.23001 ..\QtPrint\mainwindow.cpp 369
"按下确定"
"\\10.10.100.120\PRINTER-RD" ..\QtPrint\mainwindow.cpp 375
(6, 257, 258, 259, 260, 1000, 3) ..\QtPrint\mainwindow.cpp 376
(600, 1200) ..\QtPrint\mainwindow.cpp 377
0 ..\QtPrint\mainwindow.cpp 378
false ..\QtPrint\mainwindow.cpp 379
"A4" ..\QtPrint\mainwindow.cpp 381
"确定后"
30 ..\QtPrint\mainwindow.cpp 385
QRect(0,0 -1x-1) ..\QtPrint\mainwindow.cpp 386
QRect(0,0 -1x-1) ..\QtPrint\mainwindow.cpp 387
0 0 0 0 ..\QtPrint\mainwindow.cpp 389
"确定后用setPaperSize()设置A4"
0 ..\QtPrint\mainwindow.cpp 394
QRect(0,0 794x1122) ..\QtPrint\mainwindow.cpp 395
QRect(16,16 762x1090) ..\QtPrint\mainwindow.cpp 396
4.23001 4.23001 4.23001 4.23001 ..\QtPrint\mainwindow.cpp 398
E:\ProjectsQt\build-QtPrint-Desktop_Qt_5_2_0_MinGW_32bit-Release\release\QtPrint.exe exited with code 0

2,按取消按钮输出:
引用
Starting E:\ProjectsQt\build-QtPrint-Desktop_Qt_5_2_0_MinGW_32bit-Release\release\QtPrint.exe...
"\\10.10.100.120\PRINTER-RD" ..\QtPrint\mainwindow.cpp 357
(6, 257, 258, 259, 260, 1000, 3) ..\QtPrint\mainwindow.cpp 358
(600, 1200) ..\QtPrint\mainwindow.cpp 359
0 ..\QtPrint\mainwindow.cpp 360
false ..\QtPrint\mainwindow.cpp 361
"A4" ..\QtPrint\mainwindow.cpp 362
"确定前默认为A4"
0 ..\QtPrint\mainwindow.cpp 365
QRect(0,0 794x1122) ..\QtPrint\mainwindow.cpp 366
QRect(16,16 762x1090) ..\QtPrint\mainwindow.cpp 367
4.23001 4.23001 4.23001 4.23001 ..\QtPrint\mainwindow.cpp 369
"按下取消"
"\\10.10.100.120\PRINTER-RD" ..\QtPrint\mainwindow.cpp 403
(6, 257, 258, 259, 260, 1000, 3) ..\QtPrint\mainwindow.cpp 404
(600, 1200) ..\QtPrint\mainwindow.cpp 405
0 ..\QtPrint\mainwindow.cpp 406
false ..\QtPrint\mainwindow.cpp 407
"A4" ..\QtPrint\mainwindow.cpp 408
"取消后"
0 ..\QtPrint\mainwindow.cpp 411
QRect(0,0 794x1122) ..\QtPrint\mainwindow.cpp 412
QRect(16,16 762x1090) ..\QtPrint\mainwindow.cpp 413
4.23001 4.23001 4.23001 4.23001 ..\QtPrint\mainwindow.cpp 415
"取消后用setPageSizeMM()设置A4"
30 ..\QtPrint\mainwindow.cpp 420
QRect(0,0 794x1123) ..\QtPrint\mainwindow.cpp 421
QRect(0,0 794x1123) ..\QtPrint\mainwindow.cpp 422
0 0 0 0 ..\QtPrint\mainwindow.cpp 424
E:\ProjectsQt\build-QtPrint-Desktop_Qt_5_2_0_MinGW_32bit-Release\release\QtPrint.exe exited with code 0

...全文
461 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Babyboymanold 2017-08-20
  • 打赏
  • 举报
回复
为什么页面设置对话框选择的是A4纸,代码里获取的paperSize却是负数呢?
2022年11月4日-2022年11月14日购买当前课程赠送课程学习地址如下:https://edu.csdn.net/course/detail/32434https://edu.csdn.net/course/detail/35658https://edu.csdn.net/course/detail/30223https://edu.csdn.net/course/detail/32408https://edu.csdn.net/course/detail/32429注:因赠送课程不会出现在已订阅课程列表中,以下课程学习地址一定要收藏保存。#课程服务 在线答疑:本课程设有专门的讨论留言区,学习中遇到任何问题,直接给老师留言即可,老师都会及时进行回复。远程协助:如果遇到复杂问题,老师还可进行远程协助,这个一般可不是一两百元的课程就能享受到的。源码分享:为了让大家更好的进行项目实战,老师还将课程中涉及到的所有源码分享给学员,按照视频中的提示进行下载即可。在CSDN分享C++ Qt开发知识已经有6年了,感谢众多博友对我的支持,了解到很多人对Qt的使用还是有些困扰,例如Qt环境搭建,Qt布局的使用,如何使用Qt编写复杂的界面,如何自定义非标控件,Qt如何和Web交互,Qt和后台接口如何交互等;经过这几年的整理,我决定出这套《Qt高级开发视频教程》,带领大家学习Qt高级开发知识,学习如何使用Qt开发企业级别的项目;通过本课程的学习,大家将会达到企业招聘的中高级要求。为了照顾零基础学员,本课程第一章会介绍Qt环境搭建、QtCreator / VS2019的基本使用方法,Qt整体架构、Qt信号机制,Qt内存管理等知识。即使没有Qt开发的学习经验,也能跟着课程顺利学习。课程核心知识点地图如下: 课程每章核心知识点介绍如下: 第一章:介绍Qt环境搭建、QtCreator / VS2019的基本使用方法,Qt整体架构、Qt信号机制,Qt内存管理等知识。第二章:了解到很多学员对于Qt界面布局很不熟悉,将会详细介绍Qt设计器布局,以及如何C++代码手写布局,从常见的企业级项目入手,带领大家学会各种布局的实现,例如WPS、腾讯会议、优酷、迅雷等界面的实现;界面布局会了,这是企业项目开发的第一步,还有更重要的无边框窗口,如何设计一个合理的无边框窗口很重要,第三/四章:详细介绍如何实现一个无边框窗口,如何自定义标题栏,如何实现拖拽拉伸;第四章将会介绍如何自定义非标控件,优化Qt界面。第五章:介绍Qt web混合编程,一个商用项目,必然会涉及到web交互,这也是很多Qt开发者的弱项,这一章讲详细介绍C++ Qt web混合开发。第六章:既然是做企业级项目,必然需要和后台交互,http编程也是必要的,将详细介绍http编程,用户注册,登录,后台接口请求等知识;通过第五、六章的学习,将会是你的Qt开发技术更上一层楼。第七章:介绍Qt并发编程,耗时任务处理,进程调用等知识。第八、九章:讲解 Qt 比较重要的知识,图形视图结构,以及MVD模式;通过这两章的学习,大家会对图形视图有更好的了解。第十章:本章是独立章节,主要介绍Qt中一些特殊技巧,项目编译,dpi适配、多语言等知识。第十一章:是我们的企业级项目实战:实现一个视频会议客户端,本项目可以进行多人视频通话,直播,桌面分享等功能,本项目我会从零开始,进行项目搭建,功能调试,bug fixed, 带领大家做一个企业级项目。希望通过本课程的学习,大家的C++ Qt开发技术能有质的飞越,能找到自己心仪的工作。课程中如果讲的不对的地方,请大家指出,我及时修正,我也只是一个普通开发者,也不是所有的技术都会,尽我所能,把我所会的教给大家,让我们一起为Qt的发展,尽一份绵薄之力。 下面是本课程一些项目的截图: 1 可以滑动的设置界面         2 所有图形的绘制       3 视频播放器          4 高仿youku界面         5 视频会议         相信通过本课程的学习,大家有能力实现绝大部分客户端项目,从此用C++ Qt再也不会有难写的界面。

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧