QT5开发及实例学习之十一Qt5文件操作功能
文章目录
- 一、新建文件
- 二、打开文件
- 三、打印文件
- 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文件操作功能相关推荐
- QT5开发及实例学习之十Qt5主窗口构成
文章目录 一.基本元素 1.菜单栏 2.状态栏 3.工具栏 4.锚接部件 5.中心部件 6.激活上下文菜单 二.文本编辑器示例 三.菜单与工具栏的实现 1. 动作(Action)的实现 2. 菜单(M ...
- QT5开发及实例学习之十七Qt5双缓冲机制
文章目录 一.原理与设计 二.绘图区的实现 三.主窗口的实现 一.原理与设计 所谓双缓冲机制,是指在绘制控件时,首先将要绘制的内容绘制在一个图片中,再将图片一次性地绘制到控件上.在早期的 Qt 版 ...
- QT5开发及实例学习之十三Qt5文本编辑功能
文章目录 前言 一.设置字体 二.设置字号 三.设置文字加粗 四.设置文字斜体 五.设置文字加下画线 六.设置文字颜色 七.设置字符格式 前言 在编写包含格式设置的文本编辑程序时,经常用到的 Qt ...
- 【Python基础知识-pycharm版】第十一节-文件操作(IO技术)
第十一节-文件操作(IO技术) 文本文件和二进制文件 文件操作相关模块概述 创建文件对象 open() 文本文件的写入 基本的文件写入操作 常用编码介绍 ASCII ISO8859-1 GB2312, ...
- 【Qt5开发及实例】22、文件浏览器
文件浏览器 今天有点痿了,昨天晚上2点左右睡的,怪我太痴迷编程???? NO!NO!NO! 看网络小说到2点,= =.我也是醉了,不知道为什么昨天晚上就是睡不着,然后就掏出手机看起了小说,结果是TM ...
- 【Android 逆向】Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )
文章目录 前言 一.Android 进程读取文件所需的权限 二.fopen 打开文件标志位 三.验证文件权限 前言 一.Android 进程读取文件所需的权限 通过 注入工具 , 将 libbridg ...
- 第十一章 文件操作_C语言fopen函数的用法,C语言打开文件详解
在C语言中,操作文件之前必须先打开文件:所谓"打开文件",就是让程序和文件建立连接的过程. 打开文件之后,程序可以得到文件的相关信息,例如大小.类型.权限.创建者.更新时间等.在后 ...
- 【安卓开发】调用系统原生的文件分享功能将文件分享给QQ或微信好友
调用系统原生的文件分享功能将文件分享给QQ或微信好友 核心代码: //传入的fileName是文件名的全路径@SuppressLint("QueryPermissionsNeeded&quo ...
- QT5开发及实例学习之十八显示Qt5 SVG格式图片
SVG 的英文全称是 Scalable Vector Graphics,即可缩放的矢量图形.它是由万维网络联盟 ( World Wide Web Consortium, W3C ) 在 2000 ...
最新文章
- Spring Hibernate JPA 联表查询 复杂查询
- 目前流行的装修风格_当下最流行十种装修风格,总有一款适合你!
- 【译】CREDITS: Peer-to-peer (P2P) network and its components
- mysql实验步骤_MySQL双方配置实验步骤
- HTTP 应用层过滤的兼容性问题及解决方案
- PASS云计算书简介——接近完美的模式
- cAdvisor资源监控工具入门
- WebVirtMgr + KVM 环境中的 Linux 虚拟机部署
- css pseudo elements,CSS 伪元素 (Pseudo-elements)
- nvivo三天写论文!可视化操作实战
- layui数据表格分页简单实现
- 上帝说:“首先,请叫我同志……”3
- Ubuntu20.04 安装python3.7
- 技术人员如何快速提高管理能力和领导力
- mysql 视图报错1356,mysql视图初探 - osc_ky6f5kf1的个人空间 - OSCHINA - 中文开源技术交流社区...
- 宝塔面板 SSL 证书安装部署
- 想要骑驴找马,这些事一定要注意!
- 《穷爸爸富爸爸》良句收录和读后感想
- 《java入门基础》读书笔记
- android 环信红包异常,环信上线新特征:阅后即焚+消息撤回+红包