Announcing YapStocks 2.0

Over the last few weeks, I’ve been working on a new plasmoid (KDE Plasma Applet) that provides a simple interface to monitor stocks. The first version was rather basic, being able to show the current market price only. Now it’s time to announce the availability of the second iteration of YapStocks (Yet Another Plasma Stocks Applet). I’ve recorded a short video clip showcasing all the features it has, ranging from the information summary to the historical price chart.

Continue reading “Announcing YapStocks 2.0”

Use npm packages in QML

I’ve been trying to code up some nice GUI for a hobby project which was done in JavaScript (Node.JS). I’ve looked at a few options that I have

  1. Use the not-yet-stable NodeGUI
  2. Go Web and use Electron
  3. Rewrite the core in Python or C++ to use Qt
  4. Use QML which has limited support for JavaScript

I’ve explored the option 1, however, I soon ran into the problems with the Model/View/Delegate architecture which means I would have to implement native plugins/add-ons in order to use ListView. Not to mention the framework itself is still heavily under development.

As for option 2, I’m not a web frontend engineer and personally I much prefer something that is native (or looks and feels native at least). For the third option, it feels a bit overkill but it is a possible way out.

Luckily I don’t have to do the re-implementation, because I’ve managed to get the core functionality bundled into a single JS file which works flawlessly in the QML environment. Before I start diving into the details on how you can make your npm packages work in QML, I have to emphasise that there are many limitations in the QML environment and it’s very likely that only a small subset of the npm package that you’re interested in is going to work.

Continue reading “Use npm packages in QML”

也谈Boost::Serialization的用途和用法

研究生只念一年的坏处就是毕业设计好像变成一年一度的了……这次毕设是和并行计算有关(毕竟念的是「高性能计算硕士」),多线程是不够的,因为一台设备的CPU核心数毕竟有限,所以多进程的并行计算才能发挥计算机集群(HPC cluster)的计算威力。这方面的de facto standard就是MPI了,而在C++项目中可以通过Boost库的MPI包装更方便、「更C++」的来调用。Boost库的质量和重要程度个人感觉仅次于STL了,看看C++11吸收了大量Boost库进入STL就知道Boost有多厉害。

和Serialization的关系?既然用C++,就免不了自定义类吧,想要把一个类的实例通过MPI发送到其他MPI节点上,首先就要把类进行serialize,然后把serialized memory发送出去,接收方再unpack还原成一个实例。就不展开说了,简而言之这一点和MPI的通信原理有关。

Continue reading “也谈Boost::Serialization的用途和用法”

libQtShadowsocks项目介绍和备忘

shadowsocks应该是继各种VPN和GoAgent之后,目前最受欢迎的代理协议了。VPN不灵活,而且能够被防火墙识别特征,能够轻松封锁,GoAgent则面临可用IP越来越少的困境。懒得介绍原项目了,不知道shadowsocks的自己去Google查吧。

libQtShadowsocks就像名字暗示的一样,是一个Library(库),用Qt(C++)写的,实现了shadowsocks的各项功能。

Continue reading “libQtShadowsocks项目介绍和备忘”

材料微观组织图像分析软件即我的毕设项目开源

今天毕业设计答辩结束了,心情大好,于是回宿舍写下了本文~~(脑洞大开的节奏)

我的毕设项目是开发一个材料微观组织图像的分析软件,说直白点,主要功能就是数晶粒、测晶粒度级别数的,还能测多孔材料的孔隙率,第二相百分比等。软件名称是Computer-Aid Interactive Grain Analyser,简称CAIGA,名字没想太久,随便取的。。。

Continue reading “材料微观组织图像分析软件即我的毕设项目开源”

浅析C++11的Lambda表达式

Lambda表达式(又称Lambda函数,英文原文是Lambda Expression),是C++11的新特性中非常实用的一个。

之前一直自动忽略C++11的新特性,因为很多新特性的应用场景都十分有限,Lambda表达式就不同了,网上放狗一搜可以看到「函数对象」的理念在不少语言中都有实现,标准模板库之前有std::function来把函数包装成对象来使用,而现在有了Lambda表达式之后就更加方便了。

下面稍微解释一下Lambda表达式。

Continue reading “浅析C++11的Lambda表达式”

自定义QWidget类使Qt图像控件能自动缩放

每次给这类文章取名字都很烦,一不小心就又臭又长了!>.< ...... 下面转入正(cai)题(guai) 相信大家一开始也和我一样,用QLabel来充当图像的显示控件,不过应该很快就会发现QLabel显示出来图像后,如果再改变父级控件的大小,此时QLabel的图像不会跟着变大而是保持原来的大小。更为糟糕的是,父级控件无法缩小了,因为QLabel的图像不会自动缩小,限制了父级控件的minimumSize! 其实是一个很囧的问题,网上一搜会发现几年前就有人提出怎么没有一个专门的QImageLabel啊?可能priority太低吧……Anyway,下面介绍通过自定义类(继承QWidget)实现一个可以自动缩放图像的控件。 Continue reading “自定义QWidget类使Qt图像控件能自动缩放”

让Qt Designer设计的Widget随MainWindow增大而增大

入门Qt,各位老鸟见笑了。网上一搜有这个问题的还不少,而且一些中文博客/论坛用一些旁门左道误导不明真相的群众,还是写下本文吧。

问题描述

通过Qt Creator中的Designer(或者独立的Qt Designer程序)设计Qt程序外观的时候,里面添加的小部件(Widgets)不能随着主窗体(MainWindow)的增大而增大。

解决办法

Continue reading “让Qt Designer设计的Widget随MainWindow增大而增大”

Linux下Qt创建和调用共享库文件.so

费了点功夫,总算get了编写共享库(Shared Library,Windows下称为“动态链接库”,即Dynamic Link Library)和调用的这个新技能!

动态链接库的好处是不言而喻的,一个稍微复杂一点的程序,顶层设计的时候良好的类库划分可以让工作变得很简单,而将不同类编译成共享库文件可以实现程序的模块化,提高代码复用程度,在保证接口兼容的情况下更新一个程序只用更新共享库(Windows下是dll,Linux下常见的是so)即可。

下面以Linux下的Qt Creator这个IDE为例,讲述Qt(严格意义上是C++)共享库文件的编译和调用。

Continue reading “Linux下Qt创建和调用共享库文件.so”

C++版(Qt)灵格斯LD2/LDX文件解析/读取工具

感慨一下开源的力量真是巨大。

自我感觉KDictionary的大部分功能都已经实现的大差不差了,所以现在想着手实现下一个重要特性:离线词典。瞄准了灵格斯词霸的海量词库文件,一大堆的LD2/LDX文件,而且封闭的文件格式也已经被高手破解了!

然后鄙人花了几天功夫,再一次Qt的现学现卖,把Java代码移植到了C++(使用了Qt库)。为什么要移植?因为Plasmoid不能用Java写啊……而且我不想学Java

Continue reading “C++版(Qt)灵格斯LD2/LDX文件解析/读取工具”