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

本文介绍了如何在Qt中实现新建文件、打开文件、文本和图像打印功能,包括使用QFileDialog、QPrinter和QTextStream等工具。重点展示了文件对话框参数、文本打印对话框和图像打印的过程。
摘要由CSDN通过智能技术生成


一、新建文件

  实现新建文件功能的函数 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);           //打印图像
	    }
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值