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