Hacking Limbo

Reading / Coding / Hacking

GUI, so sad!

(无责任声明:以下吐槽纯属矫情,一个心智正常的人才不会这么挑三拣四呢。)

这年头,想在 Linux 里写个 GUI app 真是艰难。

用 GTK 的话,可选的语言有 C / Vala / Python,其余语言的库都略滞后(比如 gtk-sharp 现在还只是「实验性」地支持 GTK 3.0,人家都已经出到 3.8 了)。抛开语言不论,我的机器连 GNOME 都跑不起来,在 KDE 里写 GTK 始终不自在(特别是每次启动一个 GTK app 都有一堆 warning 跑出来吓人)。

有考虑过 Java 系的妖孽们。Swing 在我有生之年都不太可能变得好看(字体渲染什么的就不强求了),至于 SWT,随便翻了一下文档,感受是——大哥,我要写个 GUI app 而已,不是搞起夜急的 J2EE 啊(我可能误入了 Eclipse 的文档)。启动速度也是个大问题,你以为换个 SSD 就能让 JVM 启动变快么,图样图森破!

轻度尝试了 node-webkit,看上去很美好,"native" HTML5 app,还有一堆 Node.js 模块可以用。现实是,JavaScript 的底子就在那里,不管用什么 CoffeeScript / IcedCoffeeScript / LiveScript,运行时仍然是那个挫样。如果你有兴致一边写代码一边等 Google Closure Compiler 编译一边给别人修 bug,可以试试 ClojureScript。还有,node-webkit 这个名字太有迷惑性了,实际上嵌入的是一整个 Chromium,作者起名也算用心良苦啦,因为电脑没有 16G 以上内存的普通用户,哪个不是闻 Chrome 丧胆。

挑三拣四的,最后就只剩下 Qt 了。一开始就想到要用它,但目前支持 Qt 5.x 的语言只有 C++ 和 Python,而我对 C++ 始终比较抗拒(不是因为它太复杂,而是嫌它长得丑),但这样一轮下来,我唯一的选择是在一堆恶心的东西里挑一个不那么恶心的,也只好试试 C++ 了(你问为什么不用 Python?出门左转是某厂,再见!)。

一个好消息是,QML 跟 C++ 的整合还不错,所以可以用 QML 写 UI,用 C++ 写逻辑,成功避开鸡肋的 JavaScript……

小插曲:Play with QML

QML 的 layout 未免有点反直观,或者说 CSS layout rules 对我的 UI layout 认知造成了永久伤害,折腾了好久才成功地把一个元素 "float" 到右边,方法是用一个不可见的 Item 把当前 row 的空间撑开,有一种 HTML Table 布局既视感……

另外 QML 里自带的各种控件不是 scalable 的,设了一个比较大的 height 之后 SpinBox 看上去就变模糊了,用默认 size 又体现不出我想要的效果(习惯了 Web UI 的 look & feel,对着 native UI 略不习惯)。在自己画 UI 以及用 Qt 标准 UI 组件之间摇摆。有点想念我的 CSS ids & classes 了。

周一又折腾了一晚上的 QML,搞不懂 Text 的顶端为什么会有去不掉的 margin,完全找不到门路,暂时搁置。