Qt君


  • 首页

  • 关于

  • 归档

  • 搜索

Markdown文章编辑利器-进阶篇1

发表于 2019-07-03

Markdown的扩展语法。

[toc]

目录功能

  • 在文章开头单独键入一行[TOC]即可。
  • 如上文章目录由[TOC]​生成。​

删除线

  • 两个波浪线~~包含的内容。
    1
    ~~删除线~~

删除线

段落和换行

  • 通过在文本行之间留一个空行来创建新段落。
  • 在所在行后面键入两个空格进行换行。

高亮代码块

  • 在```后添加对应的语言,一般为该语言的名称或缩写。
    1
    2
    3
    4
    5
    6
    7
    ```cpp
    int main()
    {
    printf("hello world!");
    return 0;
    }
    ```

表格

  • 第一行标题栏使用|分隔开标题;
  • 第二行使用连字符---(可多个)分隔标记;
  • 第三行至后使用|分隔每个列来创建表格。
1
2
3
4
第一个标题|第二个标题
---|---
内容1 | 内容2
内容3 | 内容4
第一个标题 第二个标题
内容1 内容2
内容3 内容4

任务列表

  • 使用- [x]或- [ ]来选择框是否选中。
1
2
3
4
- [x] 任务1
- [x] 任务2
- [x] 任务3
- [ ] 任务4
  • 任务1
  • 任务2
  • 任务3
  • 任务4

嵌套列表

  • 每一级列表都需要缩进3个空格。
1
2
3
4
5
* 第一级列表
* 第二级列表
* 第二级列表
* 第三级列表
* 第二级列表
  • 第一级列表
    • 第二级列表
    • 第二级列表
      • 第三级列表
    • 第二级列表

表情

  • 连个冒号:之间的内容。
emoji ico
:smile: :smile:
:smiley: :smiley:
:smirk: :smirk:
:+1: :+1:
  • 更多相关表情查看:
1
https://github.com/ikatyang/emoji-cheat-sheet/blob/master/README.md
  • 注意:不同的markdown编辑器所支持的表情可能不同或不支持。

HTML扩展

  • 有些markdown支持解析html代码的功能。
1
2
3
4
5
6
<font face="微软雅黑" >微软雅黑字体</font>
<font size=1 >1号字</font>
<font size=2 >2号字</font>
<font color=#FF0000 >红色</font>
<font color=#008000 >绿色</font>
<font color=#0000FF >蓝色</font>
  • 效果:微软雅黑字体
    1号字
    2号字
    红色
    绿色
    蓝色

忽略Markdown格式

  • 通过使用\转义(忽略)Markdown格式。
  • 忽略特定字符:
1
这是两个星号\*之间的内容\*。

这是两个星号*之间的内容*。

  • 忽略表格内特定的内容:
1
2
3
4
| 标题1 | 标题2 |
| --- | --- |
| 内容1 | 内容2 |
| 内容3 | 带竖线"\|"的内容|
标题1 标题2
内容1 内容2
内容3 带竖线”\ “的内容

  • 更多相关请关注微信公众号:Qt君

Markdown文章编辑利器-进阶篇2

发表于 2019-07-03

介绍markdown所支持的扩展语法:数学公式,流程图,序列图,甘特图,饼图,折线图,柱状图,条形图等语法。有些语法部分markdown编辑器并不能识别,通用性较少,且为方言版本,仅供参考。

1.数学公式

  • 语法兼容于LaTeX。
  • 使用一对$包含特定的数学语法。
    数学公式插图

关于更多LaTex语法可查看:

1
https://www.latex-project.org/

2.mermaid流程图, 序列图和甘特图

  • 流程图:
    1
    2
    3
    4
    5
    ```mermaid
    graph TD;
    A-->B;
    B-->C;
    ```

流程图插图

  • 序列图:
    1
    2
    3
    4
    5
    ```mermaid
    sequenceDiagram
    A->> B: 吃饭了吗?
    B->> A: 刚吃完饭了。
    ```

序列图插图

  • 甘特图:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ```mermaid
    gantt
    title 甘特图
    dateFormat YYYY-MM-DD
    section 项目A
    任务1 :a1, 2019-01-01, 150d
    任务2 :after a1, 30d
    section 项目B
    任务3 :2019-02-01, 60d
    任务4 :30d
    ```

甘特图插图

关于更多mermaid语法可查看:

1
https://knsv.github.io/mermaid/

一些支持mermaid语法的编辑器:

  1. typora
  2. 印象笔记
  3. CSDN博客​
  4. 小书匠

3.图表

  • 饼状图:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ```chart
    ,Budget,Income,Expenses,Debt
    June,5000,8000,4000,6000
    July,3000,1000,4000,3000
    Aug,5000,7000,6000,3000
    Sep,7000,2000,3000,1000
    Oct,6000,5000,4000,2000
    Nov,4000,3000,5000,

    type: pie
    title: Monthly Revenue
    x.title: Amount
    y.title: Month
    y.suffix: $
    ```

饼状图插图

  • 折线图:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ```chart
    ,Budget,Income,Expenses,Debt
    June,5000,8000,4000,6000
    July,3000,1000,4000,3000
    Aug,5000,7000,6000,3000
    Sep,7000,2000,3000,1000
    Oct,6000,5000,4000,2000
    Nov,4000,3000,5000,

    type: line
    title: Monthly Revenue
    x.title: Amount
    y.title: Month
    y.suffix: $
    ```

折线图插图

  • 柱状图:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ```chart
    ,Budget,Income,Expenses,Debt
    June,5000,8000,4000,6000
    July,3000,1000,4000,3000
    Aug,5000,7000,6000,3000
    Sep,7000,2000,3000,1000
    Oct,6000,5000,4000,2000
    Nov,4000,3000,5000,

    type: column
    title: Monthly Revenue
    x.title: Amount
    y.title: Month
    y.suffix: $
    ```

柱状图插图

  • 条形图:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ```chart
    ,Budget,Income,Expenses,Debt
    June,5000,8000,4000,6000
    July,3000,1000,4000,3000
    Aug,5000,7000,6000,3000
    Sep,7000,2000,3000,1000
    Oct,6000,5000,4000,2000
    Nov,4000,3000,5000,

    type: bar
    title: Monthly Revenue
    x.title: Amount
    y.title: Month
    y.suffix: $
    ```

条形图插图

注意:目前已知支持软件印象笔记。

4.github快速表格

  • 在github的markdown编辑器中可以使用以下方式创建表格。
  • 使用一对---包含表格内容;
  • 表格标题使用:区分;
  • 单元格内可以存在多个内容。

注意:只能在文件开头处使用。

示例1:

1
2
3
4
5
---
title: Hello world
date: 2019-01-01
tags: 文章
---

github快速表格插图1

示例2:

1
2
3
4
5
6
7
---
title: Hello world
date: 2019-01-01
tags:
- 文章
- 随笔
---

github快速表格插图2

5.注释

  • 兼容于html注释语法。

示例:

1
<!--注释内容-->

6.避免转译代码块

  • 主要用于演示代码块。

示例:

1
2
3
4
5
6
7
````markdown
```cpp
int main()
{
}
```
````

效果:

1
2
3
4
5
```cpp
int main()
{
}
```

Markdown文章编辑利器-基础篇

发表于 2019-07-02

John Gruber(约翰-格鲁伯)创造了一个简单的语法,却是文章笔记的编辑利器,看看他是怎么做的吧。

插图
  约翰君一天躺在床上正在思考着给烦人的老总提交会议笔记,一边写一边碎碎念,让我写会议笔记还不如让我写代码。约翰君越想越气,每次都是我写,还老长又要求文字格式,都被标题字号,内容列表格式烦死了。

  一气之下重重敲了键盘一下,只见键盘空格键弹出来了,正要落在地上的瞬间,约翰就像牛顿看到苹果落地一样,灵感大发。将空格键打掉的约翰想到,我为何还要经常操作那些烦人的格式呢?就是经常使用空格键一样,我用tab缩进也可以代替宫格?!

  找到灵感的约翰君立马拿出笔来写出下列灵感:

斜体

  语法:两个*包含为斜体
  示例:*斜体*

粗体

  语法:一对**包含为粗体
  示例:**粗体**

标题

  语法:使用#后的内容为一级标题,依次类推最多可以有六级标题。
  示例:

1
2
3
4
5
6
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题

  注意:标题从一级到六级,字体越小。

引用

  语法:大于号(>)后的内容为引用内容。
  示例:> 引用
  效果:

这是引用内容

链接

  语法:[链接名](链接地址)
  示例:[Link](http://example.com)
  效果:Link

图片显示

  语法:![图片名字](图片链接)
  示例:![图片.jpeg](http://example.com/图片.jpeg)

无序列表

  语法:*号后的内容,可组合多行产生多行列表。
  示例:

1
2
3
* 无序列表
* 无序列表
* 无序列表

  效果:

  • 无序列表
  • 无序列表
  • 无序列表

有序列表

  语法:*号后的内容,可组合多行产生多行列表。
  示例:

1
2
3
1. 有序列表1
2. 有序列表2
3. 有序列表3

  效果:

  1. 有序列表1
  2. 有序列表2
  3. 有序列表3

分割线

  语法:单独的一行的***
  效果:


内嵌代码

  语法:被包含的内容。
  示例:

1
这是一段`printf("hello world!!")`代码。

  效果:这是一段printf("hello world!!")代码。

代码块

  语法:单独两行

1
&emsp;&emsp;示例:为防止转译用()包含,实际使用去除即可。

(

1
2
3
4
5
6
int main()
{
printf("hello world!");
return 0;
}
(```)

  效果:

1
2
3
4
5
int main()
{
printf("hello world!");
return 0;
}

  约翰君看看自己的成果后得意洋洋。对了,貌似还没有名字喔,低下头看到敲掉在地上的空格键,就叫它markdown,文件后缀为.markdown或.md。终于可以让自己轻轻松松休息了。

  一天早上约翰君醒来顺手写了一篇报告后刷刷网页,看到有人组织写markdown爱好者在制定markdown标准,当即约翰君就说出一句,不希望存在标准,因为每个人都有定制的想法。后来的几年人们通过不断扩展markdown语法,具备表格,数学公式,时序图等众多功能。下篇文章将会介绍到。

关于更多

  • 语法标准参考:

    1
    https://commonmark.org/help/
  • 一些使用markdown写文章的网站:CSDN,博客园,简书,印象笔记。

  • 一些在线markdown编辑网站:MarkdownEditor,马克飞象,Cmd markdown。
  • 一些markdown客户端:typore,墨客编辑器。
  • 在线markdown浏览器插件:Markdown Here。
  • 文章首发于微信公众号:Qt君

curl命令Http操作

发表于 2019-07-01

curl用于命令行或脚本来传输使用URL语法指定的数据。本文介绍使用curl进行Http请求的相关操作。

插图

1.Http操作

  一些命令参数:

参数 作用
-A 自定义User-Agent
-b 读取Cookie
-c 保存Cookie
-d 指定发送的数据
-H 自定义Header
-X 指定发送数据的方式
一般可选字段有GET POST PUT DELETE

  示例:

  • GET请求:

    1
    2
    3
    curl http://www.example.com
    或
    curl -X GET http://www.example.com
  • POST请求:

    1
    2
    3
    curl -X http://www.example.com -d "somedata"
    或
    curl -X POST http://www.example.com -d "somedata"
  • PUT请求:

    1
    curl -X PUT http://www.example.com -d "somedata"
  • DELETE请求:

    1
    curl -X DELETE http://www.example.com/123
  • Cookie操作:
    从指定网址读取Cookie和写入Cookie,可以同时设置-b和-c使用相同的文件:

    1
    curl -b cookies.txt -c cookies.txt http://www.example.com

2.超时操作

  连接超时操作(使用--connect-timeout参数):

1
curl --connect-timeout 30 http://www.example.com

  数据传输的最大允许时间(使用-m参数):

1
curl -m 3000 http://www.example.com

3.更多

  curl工具不止支持http(s)协议,还支持DICT,FILE,FTP,FTPS等协议,更多相关可以浏览官网和源码库。
  官网:

1
https://curl.haxx.se/

  源码:

1
https://github.com/curl/curl

  文章首发于微信公众号: Qt君

Qmake模板变量

发表于 2019-06-30

Qmake的TEMPLATE变量用来设置Qt项目的构建类型。

TEMPLATE变量一般支持以下类型:

TEMPLATE变量 作用
app 生成应用(默认)
lib 生成项目库
subdirs 生成子项目
vcapp 生成VS项目应用
vclib 生成VS项目库
vsubdirs 生成VS子项目

程序人生-杂谈python

发表于 2019-06-29

插图
  今天从学校回来,一路听到有人在讲人生苦短学python。听着心里痒痒,这么神奇?一直都没有看python这方面的知识,一来因为没有时间,二来因为学习一门语言要有好的兴趣。回到宿舍却是扑通的一声,舍友床头一本Python基础教程掉在我面前,当时还在想着有空找时间看下python,看到地上的这本书,刚好可以看下吧,看了前面几章不禁让人惊叹。尽管是些简单语法,却是让人眼前一亮。

望文生义

1
2
for word in words:
printf(word)

  简单语法循环体看起来就像读句子一样。

致简法则

  不用定义类型的变量,一般脚本定义变量都会使用var修饰;
  简单的重复器,下面两个例子为简单重复字符串与数组:

1
2
'python' * 3 // 'pythonpythonpython'
[12] * 10 // [12, 12, 12, 12, 12, 12, 12, 12, 12, 12]

偏执狂

  变量定义必须初始化!
  一般编程语言的代码的层次结构可以通过缩进体现,而python也这样做。但它却是强制这样做,不然就会报错。不禁想到,车到山前必有路,我是头铁我也服!
  此外笔者在想,强制代码缩进可能只是让人们养成代码缩进的好习惯,但想想可能作者深受if等控制语句的多层嵌套虐过,想想如果多层if嵌套得要多少缩进呀。强制代码一方面可以另可读性更好,另一方面却也是引导用户做更好的程序(逻辑)。

坦克与坦克歼击车

  脚本语言写起来这么方便,为什么还会有编译性语言?这个问题就像坦克与坦克歼击车,坦克歼击车能执行一些坦克的职能,火力也比坦克厉害。为什么还要坦克?

  坦克与坦克歼击车都同属于装甲车类别。装甲车有三大特性火力机动防护,坦克歼击车火力一般都会搭载重型武器和兼顾机动,这样就会导致坦克歼击车防护能力低容易导致地方火力摧毁。反观坦克,一般都会采用强大火力与重型护甲,这样就会导致机动性低,易受打击。

  类比编程语言同样地也有三大特性作用(火力)便捷(机动)生命力(防护)。C语言速度快,但缺乏Python便捷,而Python便捷却速度没C语言那么快。


  • 文章首发于微信公众号:Qt君

Qt之FTP上传/下载文件操作

发表于 2019-06-29

一个简单的FTP客户端文件上传/下载操作示例。

上传文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
QNetworkAccessManager manager;
QUrl url;
/* 设置通讯协议 */
url.setScheme("ftp");
/* 设置用户名 */
url.setUserName("root");
/* 设置密码 */
url.setPassword("123456");
/* 设置主机,也可以是域名 */
url.setHost("127.0.0.1");
/* 设置端口号,一般为21 */
url.setPort(21);
/* 设置路径 */
url.setPath("/tmp/hello.png");

/* 装载本地文件 */
QFile file("/Desktop/hello.png");
file.open(QIODevice::ReadOnly);
/* 读取本地文件数据 */
QByteArray data = file.readAll();
file.close();

QNetworkRequest request(url);
/* 上传数据,上传成功后会在远端创建/tmp/hello.png文件 */
QNetworkReply* reply = manager.put(request, data);

QEventLoop eventLoop;
QObject::connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
/* 进入等待,但事件循环依然进行 */
eventLoop.exec();

if (reply->error() != QNetworkReply::NoError) {
qDebug() << "Error: " << reply->errorString();
}

下载文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
QNetworkAccessManager manager;
QUrl url;
/* 设置通讯协议 */
url.setScheme("ftp");
/* 设置用户名 */
url.setUserName("root");
/* 设置密码 */
url.setPassword("123456");
/* 设置主机,也可以是域名 */
url.setHost("127.0.0.1");
/* 设置端口号,一般为21 */
url.setPort(21);
/* 设置路径 */
url.setPath("/tmp/test.txt");

QNetworkRequest request(url);
/* 执行Get请求 */
QNetworkReply* reply = manager.get(request);

QEventLoop eventLoop;
QObject::connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
/* 进入等待,但事件循环依然进行 */
eventLoop.exec();

if (reply->error() == QNetworkReply::NoError) {
/* 创建本地文件 */
QFile file("test.txt");
file.open(QIODevice::WriteOnly);
/* 写入文件 */
file.write(reply->readAll());
file.close();
}
else {
qDebug() << "Error: " << reply->errorString();
}

总结

  • 上传文件:配置url->加载数据->put操作
  • 下载文件:配置url->get操作->获取数据保存到文件
  • 如服务端没有身份验证,客户端可以省略用户名和密码操作。

关注Qt君公众号获取更多知识。

Qt/Qml获取1970年1月1日到现在的时间长度

发表于 2019-06-28

Qt/Qml获取1970年1月1日0时0分0秒到当前时间的长度。

Qt写法

  • 返回秒(单位)

    1
    qint64 QDateTime::toSecsSinceEpoch() const
  • 返回毫秒(单位)

    1
    qint64 QDateTime::toMSecsSinceEpoch() const

Qml写法

  • 返回秒(单位)

    1
    parseInt(new Date / 1000)
  • 返回毫秒(单位)

    1
    new Date / 1

单例类简写

发表于 2019-06-27

不用额外的内部变量创建单例类的写法。

  一般写法:

1
2
3
4
5
6
7
static Singleton* instance()
{
if (m_instance == NULL)
m_instance = new Singleton();

return m_instance;
}

  简写写法:

1
2
3
4
5
static Singleton *instance()
{
static Singleton *instance = new Singleton();
return instance;
}

  或:

1
2
3
4
5
static Singleton &instance()
{
static Signaleton instance;
return instance;
}

  利用static语法特性,被static关键词标识的变量只会初始化一次,且生命周期为全局的。

Qt处理Excel的一些库

发表于 2019-06-26

收集一些操作Excel的库。

1.基于Windows系统功能的操作

  • 使用Windows系统的ActiveX对象(QAxObject)操作Excel。
  • 使用ODBC操作Excel文件(必须安装MS Access数据库引擎)。

2.一些第三方独立库

库 .xls .xlsx 读 写 兼容平台
Qt Xlsx × √ √ √ 跨平台
xlsLib √ × × √ 跨平台
libxls √ × √ × 跨平台
LibXL √ √ √ √ 跨平台
qtXLS √ × √ √ Win
BasicExcel √ × √ √ Win
Number Duck √ × √ √ Win,Linux

2.1 Qt Xlsx

  • 介绍:在Qt的XLSX模块提供了一组类来读写Excel文件。它不需要Microsoft Excel,可以在Qt5支持的任何平台中使用。
    Qt Xlsx
  • 状态:最新版本0.2.2(最后活跃于2015年4月13日)
  • 地址:
    1
    2
    3
    http://qtxlsx.debao.me
    https://github.com/dbzhang800/QtXlsxWriter //最后活跃于2015年4月13日
    https://github.com/VSRonin/QtXlsxWriter // 最后活跃于2019年6月13日

2.2 xlsLib

  • 介绍:用于动态生成Excel文件的C/C ++多平台库。
  • 状态:最新版本2.1.0(最后活跃于2011年10月22日)
  • 地址:
    1
    http://xlslib.sourceforge.net

2.3 libxls

  • 介绍:libxls是一个可以读取Excel(xls)文件的C库。它已经在Linux x86和Cygwin上进行了测试,可以在任何小端系统上运行,但它与大端系统不兼容。
  • 状态:最新版本0.2.0(最后活跃于2019年02月11日)
  • 地址:
    1
    http://libxls.sourceforge.net

2.4 LibXL

  • 介绍:LibXL是一个可以读写Excel文件的库。它不需要Microsoft Excel和.NET框架,结合了易用和强大高性能的功能。
    LibXL
  • 状态:最新版本3.8.5(最后活跃于2019年04月25日)
  • 地址:
    1
    http://www.libxl.com

2.5 qtXLS

  • 介绍:qtXLS库提供程序员例程来访问Microsoft Excel格式的文件(.xls,.xlsx)。
  • 状态:最新版本2014
  • 地址:
    1
    http://www.qtsoftware.de/vertrieb/db/qtxls_e.htm

2.6 BasicExcel

  • 介绍:具备读写Excel功能,但存在一定局限性(不支持格式化,不支持公式,不支持图表等)
  • 状态:最新版本1.14(最后活跃于2006年8月6日)
  • 地址:
    1
    https://www.codeproject.com/Articles/13852/BasicExcel-A-Class-to-Read-and-Write-to-Microsoft

2.7 Number Duck

  • 介绍:供开发人员在Windows和Linux上用C++或PHP读写兼容Microsoft Excel的电子表格。
    Number Duck
  • 状态:最新版本2.3.8(最后活跃于2019年3月31日)
  • 地址:
    1
    https://numberduck.com

  • 本文写于2019年6月26日
1…141516…32
Qt君

Qt君

313 日志
41 标签
© 2019 Qt君
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4
粤ICP备 - 16070052号