因项目需求,需要基于国产操作系统进行开发,也就是在Linux下开发GUI程序。所以有机会调查和学习几个GUI的框架。例如:QT,GTK,wxWidgets等。当然还有其他基于JS的框架,这里暂时不做考虑。
wxWidgets是一个开源的跨平台C++架构库,它可以提供GUI和其他工具。支持所有版本的Windows,带GTK+或Motif的Unix和MacOS.
至于wxWidgets的优缺点,大家可以自行去了解。
本文重点是介绍基于wxWidgets源码的方式进行编译以及samples的编译。
wxWidgets官网文档:wxWidgets: Documentation
基于开源Linux的国产操作系统 deepin 20.8 稳定版本 / 基于ubuntu的国产系统优麒麟22.04 LTS版本
如果系统没有安装GTK的话,需要先进行安装:sudo apt-get install libgtk-3-dev。
安装完后,查看版本如下:
libgtk-3-dev:amd64 3.24.33-1ubuntu2 amd64 development files for the GTK library
两种方式:
通过git命令:$ git clone --recurse-submodules https://github.com/wxWidgets/wxWidgets.git。 在国内的话,这个方式比较慢,而且容易出错,在编译的时候很有可能会报错,提示你更新某个文件夹。
注意:如果执行没有反应的话,就直接删除那个文件夹,然后在wxWidgets目录下执行对应的命令。
直接到Downloads - wxWidgets 官网的下载页面下载源码。
注意:大家也可以去阅读上图中右侧的Documentation 下的文档,根据自己的需要可以离线也可以在线。
代码下载完成后,得到一个压缩包:wxWidgets-3.2.2.1.tar.bz2。
先通过:bunzip2 wxWidgets-3.2.2.1.tar.bz2 进行解压,得到一个tar包。
再通过:tar -xvzf 进行解压,得到对应的文件夹
如下图:
这里我们主要参考官方的文档来进行编译
基本步骤如下:
$ mkdir buildgtk $ cd buildgtk $ ../configure --with-gtk $ make $ sudo make install $ sudo ldconfig
注意:这块有可能会报gtk没有找到。如果提示gtk没找到就按照上面 环境步骤那块,安装一下gtk: sudo apt-get install libgtk-3-dev 这个包名,可能会不同。以Debian为基础的linux使用的是这个包名。在Fedora和另外一些RPM为基础的,已知的包名为:gtk3-devel.
这一步会做很多check.完成后会得到下面提示:
顺利的话,编译完成后,没有报错。
只要以上步骤没有错误,这块一般不会有问题。
如果你是通过git下载的源码,注意这块可能会报找不到一些文件,让你执行对应的git命令,执行就行了。
如果执行没有反应,进去看下该文件夹下面是否有文件,如果没有就直接删除该文件夹再去执行。
你会得到如下提示。
注意:这块有可能也什么都不提示。
注意编译目录,后面编译其他samples的目录会不一样。
文档中没有看清楚,结果用c++来编译,发现也能编译成功,如下图:
这里需要注意的一个很重要的点是后面那两个符号,键盘左上角的那个符号,否则编译时会报错: $ c++ -o minimal minimal.cpp `wx-config --cxxflags --libs`
完成后执行结果如下:界面看起来还是不错的。
当然你执行 g++ -o minimal minimal.cpp `wx-config --cxxflags --libs` 也能得到一样的结果,如下图:
同样的方法,没法直接编译多文件,多文件的话,需要使用的makefile文件,如下,我们进入一个多文件的sample里面
widgets
直接make能行吗?我们试一下。
提示没有makefile,当然就无法编译了。
同时,如果使用 make -f makefile.unx, 也会报错,会提示你找不到 gtk/gtk.h 头文件。
去官网看看,怎么说:
上面这段描述,我们就看Linux部分,而且我们是从源码,使用的configure编译的。上面提到的Makefile,是在新建的buildgtk下面的samples目录下的各个sample里面呢。
如下图:
找到这个Makefile直接在目录下make.
编译完成后,直接得到一个可执行的文件widgets,直接运行,效果如下:
至此,大功告成,wxWidgets源码和samples也就都编译成功了。后面就继续学习其他部分。来完成跨平台的应用开发。
对于wxWidgets和QT的话,个人觉得,如果是简单一些的应用,使用wxWidgets来完成还是可以的。如果是比较复杂的,建议直接上QT。
但对于商业话这块来说,还是wxWidgets相对QT来说比较友好。
编译过程中,遇到各种问题,建议先去官网看看。对于使用Makefile文件编译多文件,英文不好,理解了好长时间加上不断的研究源代码以及编译最终还是将samples编译出来了。