egs中的qt编译
- 格式:doc
- 大小:26.50 KB
- 文档页数:2
egs中的qt编译
这几天我一直在xp下摆弄egsnrc,在使用的过程中,发现egs_inprz的一个bug,主要是在source选项卡中当源使用是能谱时,对能谱文件的路径处理有问题。
具体就是,在其输入文件??.egsinp文件中的路径是对的,但是在读入到egs_inprz中时,其路径中间的"\"符号丢掉了,使得每次读入时都要把文件前面的东西删除,再save。
用起来感觉不爽,于是想通过修改其源程序把这个问题给解决掉,当然这是个小问题。
不过我却总喜欢小题大作。
要对egs_inprz重新编译,根据手册需要qt3.2的库和头文件。
其实至此我对qt还一无所知,还有wingw,上网一搜知道qt是一个不错的gui开发环境,而且支持多个平台,能实现一次code到处编译的目的,wingw是编译器,能编译fortran,c,c++等。
开始我是下了个qt-win-opensource-4.2.3-mingw.exe,这个很好找,也没有看说明就想对egs_inprz编译,结果一大堆的东西找不到,error!于是想还是先按手册上的找qt3.2的老版本,我找啊找啊,就是找不到qt3.2 for win32 for wingw 的,后来下了qt3.3.7,编译结果由于我的机子内存太小,不能完成编译;换了一台内存大一点的编译花了很长时间,最后的链接由于时间太长,我都没有耐心了,直接“结束任务”。
自己编译qt看来还是不行,于是想找个编译好的,最好是qt3.2.0的这样就跟手册里提到的相同了,可是我找啊找啊,就是没有,于是求其次找到了个qt3.3.4编译好的setup-qt-win-free-mingw-3.3.4-3.exe,安装,对egs_inprz编译,能通过,也能用,不过生成的文件达到2m多,比原来的文件egs_inprz.exe(984k)大了很多,而且不能用qt-mt320.dll (4m多),只能用qt-mt3.dll(9m多),但不管如何这个编译能通过,而且也能运行,就是启动时要慢些。
后来,又对egs_gui进行编译,编译也通过了,但是运行却不行,不知为什么,于是这样看来,这样的尝试还是感觉不完美。
对问题的完美追求,其实也就是对问题的征服过程,这个问题尽管困扰我很长时间了,但是我的征服欲还是很强,我还是想把这个问题解决掉,有好几个晚上我都是凌晨2点多才睡。
还是用google不停的变换关键词,还在网上找,希望能找到一个已经编译好的qt3.2.0,还是找不到。
后来我下了个qt3.2.1的,仅有源代码,而且没有for mingw的,版本虽然非常接近qt3.2.0,只可惜没有编译好的for windows的,更可恶的是连for mingw的编译配置makefile也没有,这着实让人可爱又可惜。
后来我想既然这些都不行,看看能否自己建立一个for mingw的makefile,要做这个当然要弄个参照的,我想到了qt4.3.2,先前因为编译egs_inprz没有通过一气之下把它给删了,现在只好又把它给装上。
装好后,翻了翻各个目录下的内容,无意中发现了个qt3to4的东西,凭直觉觉得这应该是个转换工具,也许是将qt3的什么内容转换到qt4下能用的(从geant4下有个G3toG4的东西联想到的),于是在cmd下试着运行看看,从输出的情况看确实是个用于将qt3下的soures转成qt4下的sources工具,也看了其中提到的porting to qt4 文档,不过看了还是感觉说的不是很清楚,或是我的理解不清晰,最后希望这样的文档能有个例子,不知有没有,我没有仔细看,还是用百渡搜中文的吧,输入关键词“qt3to4.exe”,有很多介绍,具体如何用感觉清晰多了。
下面具体介绍整个处理过程的步骤:
1、运行qt-win-opensource-4.2.3-mingw.exe,安装qt4.3.2,我是安装到e:\qt\4.3.2。
2、在qt目录下建一个qtvars.bat
内容为:
echo Setting up a MinGW/Qt only environment...
set QTDIR=e:\Qt\3.2.1
set PATH=%PATH%;%QTDIR%\bin;E:\EGSnrc\HEN_HOUSE\gnu\bin
set QMAKESPEC=win32-g++
上面的E:\EGSnrc\HEN_HOUSE\gnu\bin是安装egsnrc时一起安装上的mingw编译器的bin 路径。
打开cmd命令窗口,进入目录E:\EGSnrc\HEN_HOUSE\gui\egs_gui 进行如下操作:
>qmake -project egs_gui.pro //生成egs_gui.pro,这里其实是覆盖掉以前的egs_gui.pro
>qt3to4 egs_gui.pro //按照.pro文件把目录下的qt3代码转换成qt4的代码
在询问是否转换时,选择all。
>qmake ////生成makefile文件
>make //编译连接程序
3、make时会发现有错误,主要在egs_compile_page.cpp的177行,说QButton没有声明,显然是没有在做qt3to4时没有转换出来,我想这是qt3toqt4的bug吧。
我在qt3.2.1下的看了看有qbutton.h文件,但在egs_compile_page.cpp文件和egs_compile_page.h中都没有发现有include <qbutton.h>的地方,那么原来qt3的代码中那个文件中include <qbutton.h>呢?我找啊找啊,终于在qt2.2.1中的include下的qpushbutton.h中看到有如下代码:
#ifndef QT_H
#include "qbutton.h"
#include "qiconset.h"
#endif // QT_H
显然在egs_gui的qt3代码中,因为qpushbutton.h中已经包含了qbutton.h,所以它就没有额外include <qbutton.h>了,而在qt4的qpushbutton.h中却没有包含上面的代码。
所以虽然作了qt3to4的转换,但因为没有include <qbutton.h>,所以出错。