Qt浅谈之八:富文本转换成pdf
一、简介
Qt对富文本的处理,主要有几个感兴趣的知识点才写下这篇文章,将文本或图片转换成pdf格式、文件直接拖拽到文本框中、双击对程序全屏和缩小、滚动滑轮对文字放大缩小及安装事件过滤器通过键盘的上下按键对文本放大缩小。
二、运行图
(1)运行效果图如下图1所示。
三、详解
1、文本文件转换成pdf
void MainWindow::createPdf()
{QString fileName = QFileDialog::getSaveFileName(this, tr("导出PDF文件"),QString(), "*.pdf");if (!fileName.isEmpty()) {// 如果文件后缀为空,则默认使用.pdfif (QFileInfo(fileName).suffix().isEmpty())fileName.append(".pdf");QPrinter printer;// 指定输出格式为pdfprinter.setOutputFormat(QPrinter::PdfFormat);printer.setOutputFileName(fileName);ui->textEdit->print(&printer);}
}
调用QTextEdit的print函数进行转换输出。输出效果如下图2所示。
2、拖放功能
// 拖动进入事件
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{// 数据中是否包含URL,如果是则接收动作,否则忽略该事件if(event->mimeData()->hasUrls()) {event->acceptProposedAction();}else event->ignore();
}
// 放下事件
void MainWindow::dropEvent(QDropEvent *event)
{// 获取MIME数据const QMimeData *mimeData = event->mimeData();// 如果数据中包含URLif(mimeData->hasUrls()){// 获取URL列表QList<QUrl> urlList = mimeData->urls();// 将其中第一个URL表示为本地文件路径QString fileName = urlList.at(0).toLocalFile();QFileInfo info(fileName);// 如果文件路径不为空if(!fileName.isEmpty()){// 建立QFile对象并且以只读方式打开该文件QFile file(fileName);if(!file.open(QIODevice::ReadOnly)) return;// 建立文本流对象QTextStream in(&file);// 将文件中所有内容读入编辑器setWindowTitle(tr("文件转换:%1").arg(info.fileName()));ui->textEdit->setText(in.readAll());}}
}
在此只介绍文本的简单拖放,重载两个函数 void dragEnterEvent(QDragEnterEvent *event); //拖动进入事件void dropEvent(QDropEvent *event); //放下事件,实现拖动文件到多信息文本编辑器中去,后面还会有相应的文章专门介绍文本和图片的拖放及不同程序间的拖放。
3、全屏
// 鼠标双击事件
void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
{// 如果是鼠标左键按下if(event->button() == Qt::LeftButton){// 如果现在不是全屏,将窗口设置为全屏if(windowState() != Qt::WindowFullScreen)setWindowState(Qt::WindowFullScreen);// 如果现在已经是全屏状态,那么恢复以前的大小else setWindowState(Qt::WindowNoState);}
}
鼠标双击 文本编辑器和菜单栏外的位置都会全屏显示(全屏将隐藏菜单栏),再双击回到原来大小。
4、滚轮放大缩小
// 滚轮事件
void MainWindow::wheelEvent(QWheelEvent *event)
{// 当滚轮远离使用者时进行放大,当滚轮向使用者方向旋转时进行缩小if(event->delta() > 0){ui->textEdit->zoomIn();}else{ui->textEdit->zoomOut();}
}
向前滚动滑轮delta值大于0放大操作,向后滚动缩小操作,其运行如下图3所示。
5、方向键上下放大缩小
在MainWindow上为lineEdit安装事件过滤器, ui->textEdit->installEventFilter(this);
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
// // 事件过滤器
// // 如果是textEdit部件上的事件if(obj == ui->textEdit){if(event->type() == QEvent::KeyPress) {QKeyEvent *kevent = dynamic_cast<QKeyEvent *>(event);if (kevent->key() == Qt::Key_Down) {ui->textEdit->zoomOut();}else if(kevent->key() == Qt::Key_Up) {ui->textEdit->zoomIn();}}}return QMainWindow::eventFilter(obj,event);
}
捕获方向键的上下按键进行放大缩小操作。其运行如下图3所示。
四、总结
(1)有乱码问题时,在windows下使用QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));linux下使用QTextCodec::setCodecForTr(QTextCodec::codecForName("gb2312"));
(2)编译错误时,先删除.pro.user文件,重新打开编译。或直接使用命令行编译。
(3)源码已经打包上传到csdn上可登录下载(http://download.csdn.net/detail/taiyang1987912/7560697)。
(4)若需要沟通可以联系yang.ao@i-soft.com.cn。
Qt浅谈之八:富文本转换成pdf相关推荐
- 浅谈 串行信号 转换成 并行信号 原理
注 : 文中讲述的原理是推理和探讨 , 和现实中的实现不一定完全相同 . 开始之前, 可以先参考看看我之前写的两篇文章 : <设计一个 硬件 实现的 Dictionary(字典)> h ...
- 将txt转换成pdf格式的转换方法分享
因为喜欢看小说所以发现不少网上电子书现在下载的版本都是TXT格式的,TXT虽然在修改文字上确实方面,可是如果谈及到阅读效果,实在不敢恭维.记得曾经在网上看到一部武侠小说本想下载下来,打算空闲时候看看, ...
- txt批量转换成pdf格式的方法
大家应该对TXT并不陌生吧?TXT已经成为我们办公.学习经常接触的文本格式.有时因为某种需求而要将TXT转换成PDF,怎么更好更快地将TXT记事文本转换成PDF.其实借用第三方转换工具来完成TXT向P ...
- 将txt转换成pdf格式的详细步骤
现在网上很多小说.书籍都是TXT格式的,不少朋友想把它转换成高质量的PDF文件格式,然后在支持PDF的设备上读取和阅读.如果电脑上安装专业的TXT转PDF便捷工具,那么将TXT文本转换成PDF文档就是 ...
- .NET 将文本转换成语音 (转)
用过金山词霸的都知道金山词霸里有个功能能够将单词按其读音读出来.也许会有人认为它是事先将所有的单词的读音文件存储在数据库里,然后事需要的时候再调用.其实事实上并不是这样,我们有更好的解决办法,MS就专 ...
- 富文本转换字符串 php,php 如何将一个富文本字符串生成word文档?
问题描述 我现在有一个富文本字符串, 比如$str=" qqq啊啊啊啊啊百度网址 ": 中间我省去了大量的图片base64的编码. 问题出现的环境背景及自己尝试过哪些方法 相关代码 ...
- Word/WPS 文本转换成表格
Word 文本转换成表格 WPS Word 将文本转换成表格 将表格转换成文本 参考资料 WPS 使用WPS Office打开文档,在文字内容间用统一的标记或符号分隔开. (这里使用英文逗号分开) 选 ...
- typora+pandoc:markdown文本转换成word(也可把word转换成markdown哦)
因为想把自己写的博客转换成word,博客是markdown格式,公式什么的又懒得在word里面敲第二遍.于是就找了个方法让.md文本与.doc文本转换.反之也可把word转换成markdown哦.教程 ...
- ffmpeg 将文本转换成音频以及多个音频合成一个音频的方法
去除文本中多余的无用字符 首先使用strip_tags函数,去除文本中的htm标签.如果有第二个参数,则第二个参数表示运行存在的标签. 第二步可以使用urldecode函数进行编码转换,将URL编码转 ...
最新文章
- PageHelper 使用 ThreadLocal 的线程复用问题
- Debian和CentOS主流系统按包含文件名称搜索软件包
- python爬快手个人介绍个性_快手个性个人介绍句子签名 快手自己介绍模板句子...
- C++ Primer 5th笔记(6)chapter6 函数: 参数
- Keras 获取中间某一层输出
- Python isalpha()方法
- flutter字体不跟随系统_Flutter自定义字体无法加载
- CodeBlocks下载安装的坑,无法编译成功
- 纸张大小、规格、度量详解
- python制作口算大师
- Files的常用方法都有哪些?
- Windows进行Java Web开发,电脑上安装什么?
- 游戏夜读 | 简单认识一下爬虫
- MTK智能平台分区解析
- HTML5三种对密码加密的方法
- [ahk]解析大智慧自选股blk文件中的股票代码
- [Stata] 分类变量画直方图(频率分布)
- AI 人工智能学习之方差分析
- python通过ssh连接linux,执行命令
- 各大Android手机厂商进入工程模式方式{LogCat调试 日志打印}