GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GTK是个令人又爱又恨的东西,我想之所以还没有彻底被Qt消灭,除了兼容性的考虑,再就是那些漂亮的主题了。在Linux环境下Qt使用GTK的主题非常容易,但是Windows环境就比较麻烦了。笔者5年前写过一篇文章,聊了聊Windows下GTK的使用以及与Qt的结合(Jerry Jho:移植QGtkStyle到OSX和Windows),但如今64位系统已经普及,GTK官网提供的32位bundle已经不适用了。
幸好我们有了MSYS2这套环境,可以让老树发新芽。国内用户可以在清华的镜像站安装MSYS2并配置国内的源。
Tsinghua Open Source Mirrormirrors.tuna.tsinghua.edu.cnMSYS2安装好之后,启动mingw64环境,运行下面的命令即可安装GTK2以及编译器,非常方便。
pacman -S mingw64/mingw-w64-x86_64-gtk2
pacman -S mingw64/mingw-w64-x86_64-gcc
pacman -S mingw64/mingw-w64-x86_64-pkg-config
pacman -S mingw64/mingw-w64-x86_64-diff
pacman -S make
pacman -S msys/msys2-w32api-runtime
这时候可以运行gtk-demo查看gtk是否能正常运行。
MSYS2自带的gtk主题比较少,因此需要自己编译。例如我最喜欢的nodoka主题:
wget http://deb.debian.org/debian/pool/main/g/gtk-nodoka-engine/gtk-nodoka-engine_0.7.0.orig.tar.gz
tar zxf gtk-nodoka-engine_0.7.0.orig.tar.gz
cd gtk-nodoka-engine-0.7.0
./configure
make
make install
这里需要注意,由于libtools在mingw环境下的适配问题,你会发现一大堆warning之后只产生了一个静态库(毕竟是个老古董了)。所以需要手工编译、安装动态库,这样才能用
gcc -shared .libs/*.o -o libnodoka.dll `pkg-config --libs gtk+-2.0`
cp libnodoka.dll /mingw64/lib/gtk-2.0/2.10.0/engines/
由于gtk-chtheme无法在最新的gcc 10下编译通过,只好手工指定主题文件了
export GTK2_RC_FILES=/mingw64/share/themes/Nodoka-Silver/gtk-2.0/gtkrc
再次运行gtk-demo,可以看到nodoka主题已经成功的使用