修改QMenu中的Icon大小

提到QMenu中如何定制Icon的大小,第一个想到的是使用qss来修改样式,便尝试了如下语句:

1
2
3
4
5
QMenu::icon
{
width: 24px;
height: 24px;
}

但是经尝试,这个办法并未奏效,QMenu中图标大小,默认为16*16,是从QStyle中读取而来,我们可以通过自定义一个QStyle来实现修改图标大小,下面给出具体实现方式。

Qt中系统相关翻译

Qt中系统控件如何进行翻译呢,Qt的发布包中其实是有相关的翻译文件,源文件.ts以及二进制版本.qm都是有提供的。我们可以在发布路径下找到qm文件,以Qt5.7为例,即C:/Qt/5.7/msvc2015_64/translations/qt_zh_CN.qm

但是这个文件时有缺失的,所以我们为了翻译的完全,以及更好地体验,需要自行修改ts文件,在原有的ts文件末尾追加一些翻译,然后利用lrelease自行生成.qm文件。官方的.ts文件一般位于源码路径下,例如C:/Qt/5.9.1/Src/qttranslations/translations/qt_zh_CN.ts。下面列举三个Qt并未进行翻译的地方,我们只需将下面给出的xml源码,复制到ts文件中相应位置即可。

Nginx使用以及相关配置

Nginx(发音同engine x)是一个 Web服务器,也可以用作反向代理,负载平衡器和 HTTP缓存。本文主要介绍下nginx的使用方法,以及如何在一台服务器上配置多个域名和端口。

关于nginx的相关应用场景我们这里不做详细说明,介绍两个相关名词,常见用于搭建web服务器的两种架构:

  • LNMP指的是:Linux + Nginx + MySQL + PHP这种网站服务器架构。
  • LAMP指的是:Linux + Apache + MySQL + PHP(有时也是指Perl或Python)。

Mac系统中截图

Mac系统下截图大体有两种方法:

  • command + shift + 3 :全屏幕截图
  • command + shift + 4 :区域截图

默认情况下,截图会保存到桌面,默认格式为png,以上两个操作,如果你同时按住Ctrl,截图会保存在剪切板中,可以使用command + v来进行粘贴。下面我们介绍如何进行更多个性化的操作与设置。

Mac下加密文件

由于Mac系统下Spotlight工具的强大,我们如若想存储一些隐私文件,不被人所知,有如下两种方法:

  • 单纯的隐藏文件,在Finder中看不到,但是Spotlight依然可以搜索到。
  • 我们可以制作一个加密的映像文件——dmg格式。dmg格式相当于windows中的iso。可以随意拷贝,使用时类似加载光盘的效果。

PImpl机制以及Qt的D-Pointer实现

PImplPointer to implementation的缩写, 是C++ 在构建导出库接口时特有的技术手段。 即是将类Class中所有私有变量以及私有方法,封装在一单独的实现类ClassImpl中。我们在Class中通过一指向ClassImpl的私有指针,访问这些私有数据。而ClassImpl类的具体定义和实现,我们放入cpp中。Qt中的D-Pointer技术,便是PImpl机制的一种实现方式。

优点:

  • 使得程序接口有着稳定的ABI(应用程序二进制接口),即不会打破二进制兼容。
  • 降低了程序编译依赖,从而缩短编译时间。
  • 数据隐藏,使得头文件很干净,不包含实现细节,可以直接作为 API 参考。

缺点:

  • 实现者需要做更多工作。
  • 由于子类需要访问,此机制对protected方法不奏效。
  • 由于数据的隐藏,多少造成了代码可读性下降。
  • 运行时性能被轻微的连累,尤其调用的函数为虚函数时。

C++的二进制兼容

在深入了解前,首先我们要明确两个概念:二进制兼容和源码兼容。

  • 二进制兼容:在升级库文件的时候,不必重新编译使用此库的可执行文件或其他库文件,并且程序的功能不被破坏。

  • 源码兼容:在升级库文件的时候,不必修改使用此库的可执行文件或其他库文件的源代码,只需重新编译应用程序,即可使程序的功能不被破坏。

程序编译的四部曲

提到编译我们并不陌生,静态编译、动态编译等相关概念也经常出现,那么编译到底是什么,编译的过程又是如何呢?其实我们平时提到的编译,仅仅是编译过程中的一部分,真正的编译过程可总结为如下四步:

  • 预编译
  • 编译
  • 汇编
  • 连接

Windows注册全局热键

说起热键,大家一定不陌生,程序的热键有两种:

  • 程序内部:当程序处于active状态时,才响应的键盘事件。
  • 全局热键:顾名思义,任何地方均可调用的热键。比如 我们最常用的QQ截图Ctrl+Alt+A

下面我们就介绍下,在Windows操作系统中,如何使用全局热键。

程序编译过程中编码的作用

在读过编码与编码一文中,我们介绍了不同情况下编码所指代的不同含义,这里我们主要谈一谈,在程序编译的过程中,编码所起到的作用。首先我们要阐述如下几个定义:

  • 源文件编码:文件其实就是一堆字节所组成的,生成这些字节序列的方式即源码编码。
  • 编译器执行编码:编译器最终生成执行文件时的编码。

总结来看,编译过程中,编译器通过识别源文件的编码,将其按照执行编码进行转换输出,生成目标文件,最终目标文件经过链接生成可执行程序。所以当我们程序运行后,程序内部的各种数据,均是执行编码,而不是源码编码。那么不同的编译器是如何识别源文件编码并如何设置执行编码呢?

Git中使远程仓库覆盖本地修改

由于Git是分布式版本控制系统,和SVN的集中式管理不同,每个人电脑上均为完整的库,不用必须与服务器连接。所以当我们做了某些修改,想要放弃此修改时,在SVN中,我们可以删除这部分代码,然后重新update即可。那么在git中如何操作呢,我们将利用resetclean命令解决此问题。这些命令不指定路径则默认在当前路径下执行。

编码与‘编码’

编码——是我们平时经常提到的一个词,在搞清楚这个词之前,我们先来看一段有趣的对话:

这篇博文写得行云流水,博主你方便的时候把二维码给我,大爷我今天要打赏!
好的先生,感谢您的拜读,我这就把二维码传给您。
恩,我先去方便一下,回来就给您打赏。大爷的,今天晚饭没喝粥,突然肚子疼。
哈哈,您身体快赶上老大爷了。

编码就像上述对话中的词语,懂的人自然知道,不同语义下其含义不同。人们所说的编码,有时指字符集,有时又用它指字符编码,有时却又指码位。下面我们就介绍下这些究竟是什么。

  • 字符集:一系列字符的集合。
  • 码位:将抽象的字符集中每一个字符映射到一个整数,此整数即为码位。
  • 字符编码:按照某种规则,将程序数据(字节序列)和字符集的码位进行互转的方法。

All Documents

C++

Compile

Encoding

Git

Index

Linux

Mac

Qt

Windows