<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[fxbjye的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/fxbjye</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; fxbjye]]></copyright><item><title><![CDATA[QSettings用法总结]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/118520527</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/118520527</guid><author>fxbjye</author><pubDate>Tue, 06 Jul 2021 14:58:37 +0800</pubDate><description><![CDATA[用户对应用程序经常有这样的要求：要求它能记住它的settings，比如窗口大小，位置，一些别的设置，还有一个经常用的，就是recent files，等等这些都可以通过QSettings来实现。

这些settings一般都是存在系统里的，比如windows一般都写在系统注册表或者写INI文件，mac系统一般都在XML文件里，那么按照一般的标准来说，许多应用程序是用INI文件来实现的。而QSettings就是提供了一种方便的方法来存储和恢复应用程序的settings。

当我们创建一个Qsettings的对象]]></description><category></category></item><item><title><![CDATA[Qt之sql数据库系列操作]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/118519754</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/118519754</guid><author>fxbjye</author><pubDate>Tue, 06 Jul 2021 14:37:48 +0800</pubDate><description><![CDATA[1）工程设置：QT += sql

2）创建或打开数据库。


    if(QSqlDatabase::contains("qt_sql_default_connection"))
    {
        database = QSqlDatabase::database("qt_sql_default_connection");
    }
    else
    {
        QString path = QApplication::applicationDirPath();
      ]]></description><category></category></item><item><title><![CDATA[mupdf源码分析（九）显示之小部件渲染]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/117463637</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/117463637</guid><author>fxbjye</author><pubDate>Wed, 02 Jun 2021 11:28:45 +0800</pubDate><description><![CDATA[本章主要介绍mupdf标注渲染，接口是fz_run_page_annots ，下面是具体实现过程。

接口说明请参考上一章的fz_run_page_contents接口。

接口实现是通过pdf_run_page_annots-&gt;pdf_run_page_annots_with_usage接口实现。
]]></description><category></category></item><item><title><![CDATA[mupdf源码分析（八）显示之标注渲染]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/117461840</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/117461840</guid><author>fxbjye</author><pubDate>Wed, 02 Jun 2021 11:11:15 +0800</pubDate><description><![CDATA[本章主要介绍mupdf标注渲染，接口是fz_run_page_annots ，下面是具体实现过程。

接口说明请参考上一章的fz_run_page_annots


]]></description><category></category></item><item><title><![CDATA[mupdf源码分析（七）显示之页面渲染]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/117446548</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/117446548</guid><author>fxbjye</author><pubDate>Tue, 01 Jun 2021 18:15:57 +0800</pubDate><description><![CDATA[本章主要分析mupdf页面内容的渲染，接口是fz_run_page_contents，下面将详细介绍这个接口。

接口声明

/*

*接口说明：在一个设备上渲染一个页面。只有主页内容，没有注释

* page 页面对象

*dev 渲染设备对象

* transform 转换矩阵

* cookie 与调用方的通信机制

*/

void fz_run_page_contents(fz_context *ctx, fz_page *page, fz_device *dev, fz_matrix tra..]]></description><category></category></item><item><title><![CDATA[mupdf源码分析（六）显示之大致流程]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/117444505</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/117444505</guid><author>fxbjye</author><pubDate>Tue, 01 Jun 2021 15:45:31 +0800</pubDate><description><![CDATA[这一章主要描述了mupdf渲染页面资源，标注，和小部件的大致流程，详细流程将在后面的章节详细描述。

1，渲染页面资源

1.1）创建空页面显示链表 fz_display_list 对象，app-&gt;page_list = fz_new_display_list(app-&gt;ctx, fz_infinite_rect);

1.2）为页面显示链表创建渲染设备 fz_device对象mdev = fz_new_list_device(app-&gt;ctx, app-&gt;page_list);具.]]></description><category></category></item><item><title><![CDATA[mupdf源码分析（五）加载文档之页面加载]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/117442683</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/117442683</guid><author>fxbjye</author><pubDate>Tue, 01 Jun 2021 15:14:56 +0800</pubDate><description><![CDATA[这一章将详细讲解 fz_load_page接口的实现流程。此接口主要实现了根据页面索引加载指定页面资源，填充fz_page对象。

1，获取文档章节数fz_count_chapters(ctx, doc);//n = 1

2，计算每个章节的页码数，int m = fz_count_chapter_pages(ctx, doc, i);

3，加载页面资源，fz_load_chapter_page(ctx, doc, i, number - start)；

3.1）遍历所有已加载的页面链表

  f...]]></description><category></category></item><item><title><![CDATA[PDF之文档结构]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/115519267</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/115519267</guid><author>fxbjye</author><pubDate>Thu, 08 Apr 2021 17:28:37 +0800</pubDate><description><![CDATA[PDF 文档可被视为 PDF 文件正文部分所包含的对象层次结构。在层次结构的根部,是文档目录字典，可通过 PDF 文件的尾注中的 Root 条目定位。目录包含对定义文档内容、大纲、文章线索、已命名目标和其他属性的其他对象的引用。



                                                                     ...]]></description><category></category></item><item><title><![CDATA[PDF之文件结构]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/115486626</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/115486626</guid><author>fxbjye</author><pubDate>Wed, 07 Apr 2021 15:56:17 +0800</pubDate><description><![CDATA[PDF文件应有以下四个元素构成：

1）一行文件头，标识文件所符合的PDF规范版本。

2）正文，包含了组成文件中所含文档的对象。

3）一个交叉引用表，包含关于文件中间接对象的信息。

4）尾注提供交叉引用表和文件正文某些特殊对象的位置。

1，文件头，PDF 文件的第一行应是一个文件头,包含 5 个字符 %PDF- ,后跟 1.N 形式的版本号,其中 N 是 0 到7 之间的数字。

如果 PDF 文件包含二进制数据,大多数文件都是这样,那么文件头行之后应紧跟一个注释行,其中包含至少 4 个二进制字符,]]></description><category></category></item><item><title><![CDATA[PDF之过滤器简介]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/115466451</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/115466451</guid><author>fxbjye</author><pubDate>Wed, 07 Apr 2021 10:10:31 +0800</pubDate><description><![CDATA[过滤器，在读取流数据时的一个选项是用过滤器对它进行解码，生成原始的未编码数据。流的一个或多个过滤器应由流字典中的Filter条目指定，过滤器可以级联，通过依次执行两次或者多次编码转换形成传递流的管道。示例：/Filter [/ASCII85Decode /LAWDecode]。

标准过滤器包括：ASCIIHexDecode，ASCII85Decode，LZWDecode，FlateDecode，RunLengthDecode，CCITTFaxDecode，JBIG2Decode，DCTDecode，JPX]]></description><category></category></item><item><title><![CDATA[PDF之基本对象类型]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/115460327</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/115460327</guid><author>fxbjye</author><pubDate>Tue, 06 Apr 2021 17:35:00 +0800</pubDate><description><![CDATA[PDF包含8种基本的对象类型：布尔值，整型和实数，字符串，名称，数组，字典，流，null对象。

1，布尔对象，布尔对象表示真和假的逻辑值。显示为关键字true和false。

2，数字对象，PDF提供了两种类型的数字对象：整型和实数。整数对象表示数学上的整数，书写为一个或多个十进制数，可选择在前面添加一个符号，示例：123，4123，+19，-98，0。实数对象表示数学上的实数，书写为一个或多个带有可选的正负号，以及一个前导，结尾或嵌入的句点（小数点）的十进制数，示例：34.5，-3.63，+123.6，]]></description><category></category></item><item><title><![CDATA[#define 定义多行]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/115330054</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/115330054</guid><author>fxbjye</author><pubDate>Tue, 30 Mar 2021 17:01:02 +0800</pubDate><description><![CDATA[今天项目中需要定义一个宏，展示多行代码。#define 定义一行很简单，定义多行还是有点麻烦的，下面根据代码讲解我遇到的一些坑。

自定义结构体InternalTime

typedefstructInternalTime

{

structtimevaltimeStart;

structtimevaltimeEnd;

}InternalTime;

1，定义一行

#defineGetStartTime(internalTime)gettimeofday(&amp...]]></description><category></category></item><item><title><![CDATA[十六进制RGB分色值转unsigned int]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/115215749</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/115215749</guid><author>fxbjye</author><pubDate>Thu, 25 Mar 2021 18:49:59 +0800</pubDate><description><![CDATA[现在需要将R,G,B 三个分量的值成一个unsigned int 型的RGB值。

int colorR = 255;

int colorG = 254;

int colorB = 253;

unsigned int color = 0;

color = colorR&lt;&lt;16&amp;0xff0000;
color += colorG&lt;&lt;8&amp;0x00ff00;
color += colorB&amp;0x0000ff;
...]]></description><category></category></item><item><title><![CDATA[十六进制字符串转整型]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/115215516</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/115215516</guid><author>fxbjye</author><pubDate>Thu, 25 Mar 2021 18:37:00 +0800</pubDate><description><![CDATA[最近做个项目需要将十六进制字符串转成整型，具体实现如下：

1，字符串统一转小写

int tolower(int c) 
{ 
 if (c &gt;= 'A' &amp;&amp; c &lt;= 'Z') 
 { 
  return c + 'a' - 'A'; 
 } 
 else 
 { 
  return c; 
 } 
} 

2，字符串转整型

int htoi(char s[]) 
{ 
 int ...]]></description><category></category></item><item><title><![CDATA[mupdf源码分析（四）加载文档之文档初始化并加载交叉引用表]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/114825637</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/114825637</guid><author>fxbjye</author><pubDate>Mon, 15 Mar 2021 14:32:07 +0800</pubDate><description><![CDATA[这一章将详细分析一下pdf_init_document(fz_context *ctx, pdf_document *doc)接口的内部调用逻辑。此接口主要实现文档初始化并加载交叉引用表的功能。

1，解析文档版本 范围：1.0-1.7 ，pdf_load_version(ctx, doc);//操作文件流，读取首行解析文档版本

2，如果线性文件标志为真，加载线性文件，pdf_load_linear(ctx, doc)；后续章节会详细介绍线性文件过程。

3，判断是否是线性文件，pdf_check_li.]]></description><category></category></item><item><title><![CDATA[mupdf源码分析（三）加载文档之详细流程]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/114701466</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/114701466</guid><author>fxbjye</author><pubDate>Fri, 12 Mar 2021 18:15:47 +0800</pubDate><description><![CDATA[pdf文档的加载流程由pdfapp_open----》pdfapp_open_progressive接口实现，原型：void pdfapp_open_progressive(pdfapp_t *app, char *filename, int reload, int kbps);

接下来具体分析一下这个函数的实现流程。



1，注册处理程序为支持的所有标准文档类型fz_register_document_handlers(ctx);//支持pdf,xps,svg,cbz,img,fb2,html,x..]]></description><category></category></item><item><title><![CDATA[vc 打开文件对话框获取选择文件路径]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/114304697</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/114304697</guid><author>fxbjye</author><pubDate>Wed, 03 Mar 2021 11:37:12 +0800</pubDate><description><![CDATA[#include&lt;Windows.h&gt;

int getfilename(wchar_t *buf, int len)
{
 OPENFILENAME ofn;
 buf[0] = 0;
 memset(&amp;ofn, 0, sizeof(OPENFILENAME));
 ofn.lStructSize = sizeof(OPENFILENAME);
 ofn.hwndOwner = NULL;//窗体父类
 ofn.lpstrFile = buf;//文...]]></description><category></category></item><item><title><![CDATA[win32 获取系统dpi]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/114304183</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/114304183</guid><author>fxbjye</author><pubDate>Wed, 03 Mar 2021 11:28:32 +0800</pubDate><description><![CDATA[#include &lt;windows.h&gt;

//获取系统dpi
int get_system_dpi(void)
{

  //加载系统库user32.dll
 HMODULE hUser32 = LoadLibrary(TEXT("user32.dll"));
 SetProcessDPIAwareFn *ptr;
 int hdpi, vdpi;
 HDC desktopDC;

  //获取SetProcessDPIAware系统函数地址

  ptr ...]]></description><category></category></item><item><title><![CDATA[mupdf源码分析（二）加载文档大致流程]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/114302452</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/114302452</guid><author>fxbjye</author><pubDate>Wed, 03 Mar 2021 11:18:41 +0800</pubDate><description><![CDATA[mupdf源码工程是以vs2015为蓝本的，mupdf版本为1.18.0。

一，入口函数：int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)。

二，获取系统dpi:int displayRes = get_system_dpi();

三，创建fz_context 对象：ctx = fz_new_context(NULL, NULL, FZ_STORE_DEFAU.]]></description><category></category></item><item><title><![CDATA[mupdf源码分析（一）简介]]></title><link>https://blog.youkuaiyun.com/fxbjye/article/details/107693795</link><guid>https://blog.youkuaiyun.com/fxbjye/article/details/107693795</guid><author>fxbjye</author><pubDate>Thu, 30 Jul 2020 17:07:16 +0800</pubDate><description><![CDATA[1.概述

 MuPDF是一个轻量级的pdf,xp和电子书阅读器。

 MuPDF是一个跨平台的软件，可以在windows,linux和国产化平台下运行。

 MuPDF由依赖的各种软件库，命令行工具和查看器组成。

2.优势

 小巧，快速，完整：

 软件功能简单，满足各种文档格式，如PDF,XPS，OpenXPS,CBZ,EPUB等。

 软件页面渲染速度快。

 不需要依赖其他的软件和平台，单独可以完成文档的阅读功能。

3.libmuf库

 此模块是Mupdf实现...]]></description><category></category></item></channel></rss>