文章目录

  • 一、新建文件
  • 二、打开文件
  • 三、打印文件
    • 1. 文本打印
    • 2. 图像打印

一、新建文件

  实现新建文件功能的函数 showNewFile() 如下:

 void ImgProcessor::showNewFile(){ImgProcessor *newImgProcessor = new ImgProcessor();newImgProcessor->show();}

二、打开文件

  实现打开文件功能的函数 showOpenName() 如下:

 void ImgProcessor::showOpenFile(){fileName = QFileDialog::getOpenFileName(this);if(!fileName.isEmpty()){if(showWidget->text->document()->isEmpty()){loadFile(fileName);}else{ImgProcessor *newImgProcessor = new ImgProcessor();newImgProcessor->show();newImgProcessor->loadFile(fileName);}}}

  其中,loadFile() 函数的实现如下,该函数利用 QFile 和 QTextStream 完成具体读取文件内容的工作:

 void ImgProcessor::loadFile(QString filename){printf("file name: %s\n", filename.data());QFile file(filename);if(file.open(QIODevice::ReadOnly | QIODevice::Text)){QTextStream textStream(&file);while(!textStream.atEnd()){showWidget->text->append(textStream.readLine());printf("read line\n");}printf("end\n");}}

  在此详细说明标准文件对话框 QFileDialog 的 getOpenName() 静态函数各个参数的作用,其他文件对话框中相关的静态函数的参数有与其类似之处。

 QString QFileDialog::getOpenFileName(QWidget* parent=0,                    //定义标准文件对话框的父窗口const QString & caption=QString(),  //定义标准文件对话框的标题名const QString & dir=QString(),      //指定了默认的目录,若此参数带有文件名,则文件将是默认选中的文件const QString & filter=QString(),   //此参数对文件类型进行过滤,只有与过滤器匹配的文件类型才显示,可以同时指定多种过滤方式供用户选择,多种过滤器之间用 ";;" 隔开。QString * selectedFilter=0,          //用户选择过滤器通过此参数返回Options options=0);

三、打印文件

  打印的文件有文本或图像两种形式,下面分别加以介绍。

1. 文本打印

  QPrinterDialog 是 Qt 提供的标准打印对话框,为打印机的使用提供了一种方便、规范的方法。
  实现打印文本功能的函数如下:

 void ImgProcessor::showPrintText(){QPrinter printer;                           //新建一个 QPrinter 对象QPrintDialog printDialog(&printer, this);   //创建一个 QPrintDialog 对象,参数为 QPrinter 对象if(printDialog.exec())                      //判断标准打印对话框显示后用户是否单机“打印”按钮。若单机“打印”按钮,则相关打印属性将可以通过创建QPrintDialog对象时使用的QPrinter对象获得;若用户单击“取消”按钮,则不执行后续的打印操作。{//获得 QTextEdit 对象的文档QTextDocument *doc = showWidget->text->document();doc->print(&printer);                   //打印}}

  注意:Qt5 中将 QPrinter、QPrintDialog 等类归入 printsupport 模块中。如果项目引入了上面两个头文件,则需要在工程文件(".pro" 文件)中加入 “QT += printsupport”,否则编译会出错。

2. 图像打印

  打印图像实际上是在一个 QPaintDevice 中画图,与平常在 QWidget、QPixmap 和 QImage 中画图相同,都是创建一个 QPainter 对象进行画图,只是打印使用的是 QPrinter,QPrinter 本质上也是一个绘图设备 QPaintDevice。
  实现打印图像功能的函数如下:

 void ImgProcessor::showPrintImage(){QPrinter printer;                           //新建一个QPrinter对象QPrintDialog printerDialog(&printer, this); //创建一个QPrintDialog对象,参数为QPrinter对象。if(printerDialog.exec())                    //判断打印对话框显示后用户是否单击“打印”按钮。{QPainter painter(&printer);             //创建一个QPainter对象,并指定绘图设备为一个QPrinter对象。QRect rect = painter.viewport();        //获得QPainter对象的视图矩形区域QSize size = img.size();                //获得图像大小/*按照图形的比例大小重新设置视图矩形区域*/size.scale(rect.size(), Qt::KeepAspectRatio);painter.setViewport(rect.x(), rect.y(), size.width(), size.height());painter.setWindow(img.rect());          //设置QPainter窗口大小为图像大小painter.drawImage(0, 0, img);           //打印图像}}

QT5开发及实例学习之十一Qt5文件操作功能相关推荐

  1. QT5开发及实例学习之十Qt5主窗口构成

    文章目录 一.基本元素 1.菜单栏 2.状态栏 3.工具栏 4.锚接部件 5.中心部件 6.激活上下文菜单 二.文本编辑器示例 三.菜单与工具栏的实现 1. 动作(Action)的实现 2. 菜单(M ...

  2. QT5开发及实例学习之十七Qt5双缓冲机制

    文章目录 一.原理与设计 二.绘图区的实现 三.主窗口的实现 一.原理与设计   所谓双缓冲机制,是指在绘制控件时,首先将要绘制的内容绘制在一个图片中,再将图片一次性地绘制到控件上.在早期的 Qt 版 ...

  3. QT5开发及实例学习之十三Qt5文本编辑功能

    文章目录 前言 一.设置字体 二.设置字号 三.设置文字加粗 四.设置文字斜体 五.设置文字加下画线 六.设置文字颜色 七.设置字符格式 前言   在编写包含格式设置的文本编辑程序时,经常用到的 Qt ...

  4. 【Python基础知识-pycharm版】第十一节-文件操作(IO技术)

    第十一节-文件操作(IO技术) 文本文件和二进制文件 文件操作相关模块概述 创建文件对象 open() 文本文件的写入 基本的文件写入操作 常用编码介绍 ASCII ISO8859-1 GB2312, ...

  5. 【Qt5开发及实例】22、文件浏览器

    文件浏览器 今天有点痿了,昨天晚上2点左右睡的,怪我太痴迷编程???? NO!NO!NO!  看网络小说到2点,= =.我也是醉了,不知道为什么昨天晚上就是睡不着,然后就掏出手机看起了小说,结果是TM ...

  6. 【Android 逆向】Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )

    文章目录 前言 一.Android 进程读取文件所需的权限 二.fopen 打开文件标志位 三.验证文件权限 前言 一.Android 进程读取文件所需的权限 通过 注入工具 , 将 libbridg ...

  7. 第十一章 文件操作_C语言fopen函数的用法,C语言打开文件详解

    在C语言中,操作文件之前必须先打开文件:所谓"打开文件",就是让程序和文件建立连接的过程. 打开文件之后,程序可以得到文件的相关信息,例如大小.类型.权限.创建者.更新时间等.在后 ...

  8. 【安卓开发】调用系统原生的文件分享功能将文件分享给QQ或微信好友

    调用系统原生的文件分享功能将文件分享给QQ或微信好友 核心代码: //传入的fileName是文件名的全路径@SuppressLint("QueryPermissionsNeeded&quo ...

  9. QT5开发及实例学习之十八显示Qt5 SVG格式图片

      SVG 的英文全称是 Scalable Vector Graphics,即可缩放的矢量图形.它是由万维网络联盟 ( World Wide Web Consortium, W3C ) 在 2000 ...

最新文章

  1. Spring Hibernate JPA 联表查询 复杂查询
  2. 目前流行的装修风格_当下最流行十种装修风格,总有一款适合你!
  3. 【译】CREDITS: Peer-to-peer (P2P) network and its components
  4. mysql实验步骤_MySQL双方配置实验步骤
  5. HTTP 应用层过滤的兼容性问题及解决方案
  6. PASS云计算书简介——接近完美的模式
  7. cAdvisor资源监控工具入门
  8. WebVirtMgr + KVM 环境中的 Linux 虚拟机部署
  9. css pseudo elements,CSS 伪元素 (Pseudo-elements)
  10. nvivo三天写论文!可视化操作实战
  11. layui数据表格分页简单实现
  12. 上帝说:“首先,请叫我同志……”3
  13. Ubuntu20.04 安装python3.7
  14. 技术人员如何快速提高管理能力和领导力
  15. mysql 视图报错1356,mysql视图初探 - osc_ky6f5kf1的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. 宝塔面板 SSL 证书安装部署
  17. 想要骑驴找马,这些事一定要注意!
  18. 《穷爸爸富爸爸》良句收录和读后感想
  19. 《java入门基础》读书笔记
  20. android 环信红包异常,环信上线新特征:阅后即焚+消息撤回+红包

热门文章

  1. seaborn限制x与y的取值范围
  2. 流水线合成材料依赖表的生成算法
  3. java nio底层实现_Java NIO 底层原理
  4. java线程的状态有几种_Java线程的几种可用状态
  5. mysql数据库设计原则_mysql数据库设计总结
  6. eazyui ajax传值,jquery easyui ajax data属性传值方式
  7. 一些知名的J2me优秀开源UI项目
  8. Android 关于解决MediaButton学习到的media控制流程
  9. 技术文档(3)--查看和修改Linux服务器的时区和时间
  10. 使用laypage进行分页