Ubuntu 10.10下Qt与wxWidgets 编译十本文介绍的内容,不多说,下来看内容。近期由于项目需要,要调研GUI库,经查阅资料,发现相对比较出色的就是Qt和wxWidgets这两个了,因此这里选择对二者安装试用。源码安装的技巧和习惯可以参考我的文章Linux下源码安装的经验总结。
Qt的安装比较方便,在官方网站上下载Qt Creator2.1.0(有.bin格式的二进制安装包)和Qt-everywhere-opensource-src-4.7.3的源码包,对于IDE,可以直接./*.bin,就会弹出安装窗体,和Windows一样安装即可。完成后解压缩源码包tar vxf *.tar.gz即可,接下来输入./configure,程序开始检查安装环境,如果提示缺少g++,请参见我的另一篇文章Ubuntu10.10下安装gcc-4.5.3。
然后又会提示libX11未找到,这个比较麻烦,要装蛮久的,在这里列出需要的东西,libX11-6.2.1、libXau-1.0.6、libXext-1.0.4、libXrender-0.9.4、libXtrans-0.1、renderproto-0.9.3、xextensions-1.0.1、xextproto-7.0.3、xproto-7.0.13以及xtrans-1.2.6,这些东西都可以在http://freedesktop.org/Software/xlibs这个网站上下载到,值得一提的是,在GTK+的安装过程中,虽然已安装libX11但仍提示libX11 not found的解决办法就是安装libXext,这个问题在安装gtk时困扰了我好久,贴出来作为前车之鉴。
安装X11的过程中,libX11的make时会出现一个错误提示XK_Ocaron或者是XK_Ccedillaabovedot等未定义,根据错误提示查看src下的KeyBond.c文件,出错部分代码如下:
- view plaincopy to clipboardprint?
- case 0x16: /* Caucasus, Inupiak, Guarani */
- if (sym == XK_ocaron || sym == XK_Ocaron) {
- *upper = XK_Ocaron;
- *lower = XK_ocaron;
- }
- else if (sym >= XK_Ccedillaabovedot && sym <= XK_Obarred)
- *lower += (XK_ccedillaabovedot - XK_Ccedillaabovedot);
- else if (sym >= XK_ccedillaabovedot && sym <= XK_obarred)
- *upper -= (XK_ccedillaabovedot - XK_Ccedillaabovedot);
- else if (sym == XK_schwa || sym == XK_SCHWA) {
- *lower = XK_schwa;
- *upper = XK_SCHWA;
- }
- else if (sym == XK_lbelowdot || sym == XK_Lbelowdot) {
- *lower = XK_lbelowdot;
- *upper = XK_Lbelowdot;
- }
- else if (sym == XK_lstrokebelowdot || sym == XK_Lstrokebelowdot) {
- *lower = XK_lstrokebelowdot;
- *upper = XK_Lstrokebelowdot;
- }
- else if (sym == XK_gtilde || sym == XK_Gtilde) {
- *lower = XK_gtilde;
- *upper = XK_Gtilde;
- }
- break;
- case 0x16: /* Caucasus, Inupiak, Guarani */
- if (sym == XK_ocaron || sym == XK_Ocaron) {
- *upper = XK_Ocaron;
- *lower = XK_ocaron;
- }
- else if (sym >= XK_Ccedillaabovedot && sym <= XK_Obarred)
- *lower += (XK_ccedillaabovedot - XK_Ccedillaabovedot);
- else if (sym >= XK_ccedillaabovedot && sym <= XK_obarred)
- *upper -= (XK_ccedillaabovedot - XK_Ccedillaabovedot);
- else if (sym == XK_schwa || sym == XK_SCHWA) {
- *lower = XK_schwa;
- *upper = XK_SCHWA;
- }
- else if (sym == XK_lbelowdot || sym == XK_Lbelowdot) {
- *lower = XK_lbelowdot;
- *upper = XK_Lbelowdot;
- }
- else if (sym == XK_lstrokebelowdot || sym == XK_Lstrokebelowdot) {
- *lower = XK_lstrokebelowdot;
- *upper = XK_Lstrokebelowdot;
- }
- else if (sym == XK_gtilde || sym == XK_Gtilde) {
- *lower = XK_gtilde;
- *upper = XK_Gtilde;
- }
- break;
对于这个不知道什么语言的键盘说明,可以直接将case下代码全部/**/忽略掉,只留下个break,不会影响功能,修改后再编译就可以成功了。另外,建议将这些库文件全部安装在/usr/X11R6目录下,方便统一管理,统一使用,可以减少不少麻烦。
X11安装完后,还会提示Cairo无法找到,诶,只好接着找咯!下载后安装,如果有缺失提示就装上,比较简单,略过。全部安装后,就可以正确的configure了,接下来的编译过程需要3个小时左右,要做好心理准备。安装完成后,在Qt Creator中设置qmake路径,具体方法如图:
然后就可以编写个小程序试试啦,界面不错,比较简洁。计划过段时间放出Qt与wxWidgets的对比评测,到时再详细截图。
有了Qt所依赖的这些库,wxWidgets的安装就不要什么东西了,在configure时加选项--with-x11就可以了。不过wxX11的成熟度还不够,在我的虚拟机上编译都是可以的,但是运行时居然没有合适的显卡驱动,界面是惨不忍睹啊!!运行dialog例程时,还有错误如下:
- X Error of failed request: BadWindow (invalid Window parameter)
- Major opcode of failed request: 10 (X_UnmapWindow)
- Resource id in failed request: 0x0
- Serial number of failed request: 388
- Current serial number in output stream: 389
经过查阅资料,也是由于显卡驱动没装的缘故。其实我是挺倾向于wxWidgets的,但是这样的不成熟,我怎么用啊!相对来说,wxgtk则成熟了不少,不过gtk+的安装太麻烦了,我装了快两个星期了,现在卡在gtk在configure时提示checking for XOpenDisplay... no libX11,快崩溃了,谁有解决的经验望能指点一二,不胜感激。
附上Windows下使用wxWidgets的简要使用说明:
安装wxWidgets源码包后要先编译,打开vs2008命令行到wxWidgets-2.9.1\build\msw下,输入
- nmake /f makefile.vc BUILD=debug SHARED=1 MONOLITHIC=0 UNICODE=1
以及
- nmake /f makefile.vc BUILD=release SHARED=1 MONOLITHIC=0 UNICODE=1
其中,BUILD选项配置编译类型,debug或release模式;SHARED为配置生成库的类型,0为静态库,1为动态库;MONOLITHIC选项配置构建单一库1还是多个组件库0,使用单一构建,项目的设置和开发会更加简单,同时使用DLL构建的话,只需分发一个DLL文件,如果使用非单一构建(multilib),会构建出多个不同的库,这样可以避免将整个wxWidgets的基本代码链接到主程序,就可以去掉不需要的库;UNICODE的编码方式。
编译后会出100多M涨到近2G。
再用Code::Block创建wxWidgets工程,会提示选择主目录,但是貌似CB自动选择的include和library路径都错了,进入后修改,右键"Build options",第一页#defines下加__WXMSW__(linux下加__UNIX__),第二页Link libraries下去掉wxmsw29u,添加wxmsw29ud_core.lib、wxbase29ud.lib、wxtiffd.lib、wxjpegd.lib、wxpngd.lib、wxzlibd.lib、wxregexud.lib、wxexpatd.lib。第三页将三项都改成应该指向的目录,这样配置就可以轻松的在Windows下使用wxWidgets了,界面也蛮不错的,就是缺点华丽,没Qt好看。
本文来自:http://blog.csdn.net/JuanA1/archive/2011/05/25/6446175.aspx
小结:关于详解 Ubuntu 10.10下Qt与wxWidgets 编译的内容介绍完了,希望本文对你有所帮助!