热搜关键词: 电路基础ADC数字信号处理封装库PLC

pdf

QT平台升级对于储层建模软件SGeMS影响的研究

  • 1星
  • 2014-08-20
  • 818.09KB
  • 需要1积分
  • 0次下载
标签: SGeMS

SGeMS

QT平台升级对于储层建模软件SGeMS影响的研究

·32·
计算机与信息技术
½件纵横
QT 平台升级对于储层建模½件
SGeMS ½响的研究
赵智宝 张½梁 王家华
(西安石油大学 计算机学院,陕西
西安
710065 )
摘 要
SGeMS 包含了绝大多数地质统计学算法,其中包含多点统计建模的相关算法,且提供了 C++语言编写的源
代码,
因此受到½内外从事油气储层建模的专业人士的广泛重视。
本文主旨在于针对 QT 平台由 QT3 升级 QT4,
而造成的 SGeMS
½件不½进行编译、运行等问题,而提出的一种解决方案。该方案可以改动少量的源代码实现 SGeMS ½件的平台½换。
关键词
1 引言
SGeMS;编译;移植;平台
SGeMS 一共有 12 个模块。
该方案是基于分析 SGeMS 模
块之间的依赖关系,从最底层的 GsTLAppli_utils 公共模块进
行 QT 平台的升级,然后按照依赖 GsTLAppli_utils 模块的顺
序升级其他各个模块,
各个模块之间的依赖关系如图 1 所示。
经笔者亲身½验,这个方案可以有效地减少平台升级带来的
工½量和改写源代码的行数,有助于理解 SGeMS 的½系结
构、
提高工½效率。
SGeMS 是由多种开源½件包协同工½的,
在升级的过程中,环境配½的正确与否对升级的工½量½响
很大。错误的环境配½,会导致许多意外的错误产生,或者
从理论上是不½够实现升级的。
SGeMS 是由斯坦福大学石油工程系编写的大型 3D 储层
地质统计学建模½件。SGeMS 是一种基于设计模式,采用各
个模块之间的动态链接库(DLL)进行链接编写的½件。它
的设计思想、½件模块的组织方法以及编写的规范是值得思
考和借鉴的。采用这种方法可以提高模块内部的高内聚,降
½½件模块间的耦合度,隐藏实现细节,更利于½件的维护
和升级
[1]
。笔者依照 SGeMS 的设计模式,½件实现的方法,
½根溯源,提出因为 QT 平台升级而造成½响的一种解决方
案。
图 1 SGeMS 模块间的依赖关系
½件纵横
2
SGeMS 编译环境的搭建
计算机与信息技术
·33·
\lib\qt\4.2.0>"D : \Program Files\Microsoft Visual Studio
8\Common7\Tools\vsvars32.bat" 冒号很重要,建议拷贝到½
令窗口。
第 四 步 : 在 D : \qt\4.2.3> 下 运 行 configure
-debug-and-release -no-stl -no-sql-sqlite -qt-libjpeg -qt-gif
-platform win32-msvc2005。
第五步:在 D:\qt\4.2.3> nmake 进行编译,如果没有错
则编译完成。
第六步:在 Microsoft Visual Studio 2005 测试是否安装成
功。
2.2 安装 Coin3d、 SoQT 以及 Python
在½站 www.coin3d.org 下½½ coin2.5.0 for Windows vc
++ 8.0 binaries 版本和 SoQt-1.4.1,解压缩直接可以½用。如
果想自己尝试编译的过程,
请参照½站提示进行编译。 http:
//www.python.org 下½½ python-2.5 版本,双击按照提示安装
到任意盘符下。
2.3 配½库寻找路径
安装½各个程序包以后,需要在 Microsoft Visual Studio
2005 集成环境中配½ QT、Python、Coin3d 以及 SoQT 库文
件的查找路径。具½方法如下:打开 Visual Studio 2005,选
择工具中的选项,在项目和解决方案中的 VC++中配½库文
件的绝对路径,如图 2 所示。
SGeMS 环境是由多种开源½件包共同搭建起来的。主要
由 SGeMS 源码、Microsoft Visual Studio 2005、QT 4.2.3、
Coin3d、SoQT、Python、GsTL、六种½件包共同搭建的
[2]
下面就如½具½搭建编译环境进行分析。
2.1
安装 Microsoft Visual Studio 2005 和 QT 4.2.3
首先在本机安装 Microsoft Visual Studio 2005(中文版和
英文版皆可)
,安装完成以后,安装 QT 4.2.3,首先在 QT ½
站下½½ QT 4.2.3 源码。安装步骤如下:
第一步:首先解压缩 QT 4.2.3 的源代码包到某个目½下
(这里½用的是 commercial 版本)
,如:D:\Qt\4.2.3\。然后
在系统环境目½下添加一个 QTDIR=D:\Qt\4.2.3 环境变量,
并且在系统的 PATH ½加 %QTDIR%\bin 目½项,在系统中
添加 QMAKESPEC=win32-msvc2005 下½加以½得可以找到
编译后的库和应用程序。把 VS 2005 装在 D:\Program
Files\Microsoft Visual Studio 8\ 路径下,若不一样请修改您自
己的路径。
第二步:拷贝 license 文件。要安装商业版本就必须具有
安 装 商 业 的 license , 将 .qt-license 文 件 拷 贝 到 用 户 的
%USERPROFILE% 目 ½ 下 , 如 : C : \Documents and
Settings\Administrator\。
第三步:
运行 vsvars32.bat 来为 vc2005 设定环境变量。
D:
图 2 库路径配½
3
QT 3 到 QT4 的平台升级
SGeMS-1.4.1 是在 Microsoft Visual Studio 2003 和 QT3
QT4 平台上无法运行调试。所以要对 SGeMS 进行平台的移
植。这样存在的困难在于:
(1) QT3 和 QT4 在 UI 文件生成存在½制上的差异。
(2) QT3 和 QT4 在库类的构造上和库½数的½用存在
平台上开发的。
现在最新的 QT4 版本是对 QT3 进行了调整和
升级。鉴于库文件改动较大,以前½用 QT3 开发的½件,在
·34·
差异。
计算机与信息技术
寻找解决的方法。
3.3 库类中的代替类
½件纵横
(3) QT4 取代了 QT3 一些类,致½ SGeMS 中½用的
QT3 类,在 QT4 根本查找不到,这部分是比较难处理的。
针对以上问题,结合实际处理,提出一些的处理方法。
3.1 UI 的处理
QT 3 的 UI 文件在 QT 4 中直接采用 qmake 编译工程文
件是错误的。
因为它们之间在生成 UI 文件的.h 文件存在着很
大的差异。一般在处理这种问题的方法是:
(1)用 QT 4 中的 include 文件下的工具 Designer 打开
保存为同名的 UI 文件。
(2)
保存同名文件后,
采用 qmake  project,
qmake  
project  t vcapp  o test,qmake test 的方法进行½换。
注意:½换后的 UI 文件在 QT 4 中也不½直接½用,还
得在源文件中进行修改。
因为 QT 4 和 QT 3 生成 UI 文件在生成的文件名上不
同。QT 4 生成的文件名在原文件名开头加以 ui_加以标示,
例如 ui_multichoice_dialog.h。在包含该文件时应该修改头文
件加上 ui 开头标示。其次,在继承该类的时候不应该单纯的
继承本类,
还需继承 QDialog 或者 QWidget
[3]
这样可以保证
ui 文件中的 setupUi()成员½数½改正常½用。
最后在继承类实现的源文件(.cpp)中的构造½数加上
setupUi()成员½数,这样可以½得继承类可以初始化界面,
并进行启动
[4]
3.2 库½数的处理
QT3 和 QT4 在库类的构造上和库½数的½用存在巨大差
异。例如:经常½用的 QWiget,在 QT3 中构造½数为:
QWidget: QWidget (QWidget * parent = 0,
const char * name
= 0,WFlags f = 0 )
;然而在 QT4 为:QWidget:
:QWidget
(QWidget *
parent
= 0,QT:
:WindowFlags
f
= 0 )
。所以在
½用过程中,要把 name ½参去掉,而且把 WFlags 修改为
QT:
:WindowFlags,否则编译器报错,WFlags 是无法识别
的字符 。
这种方法仅仅是处理一些简单的构造问题。如果同样的
类库,½是 QT4 中缺少 QT3 的成员½数。而在 QT3 程序中
又½用了该½数,采用以上的方法是行不通的。
例 如 : QT3 中
有。
解决这种的方法是:查询 QT4 的帮助文件,查找是否存
在 Q3Painter;如果存在,就把这个头文件包含进去,即
#include <Q3Painter>。
这种方法的优点是½更½的兼容 QT3,
减少更改代码工½量
[6]
。缺点是如果以后有更高的版本,还需
QPainter 有 这 样 的 ½ 数 void
setBackgroundColor (const QColor & c )
,而在 QT4 中却没
[5]
如果程序中½用的类,在 QT4 库中根本没有怎么解决。
例如:在 SGEMS 中½用了 QWidgetFactory 类动态生成 Ui
界面,而在 QT 4 中根本不存在 QWidgetFactory 类。因此直
接在 QT 4 ½用 QWidgetFactory,编译器是报错的。换种思路
采用 QT3Support Module,还是找不到解决的办法。那么现在
只½在 QT 4 的帮助文档中,寻找功½类似的,而且参数类型
类似的½数加以代替;如果找不到,这个办法也就失效了。
(注意:查询相似½数的过程是一个耐心而繁琐的工½。
通 过 查 询 QT 4 帮 助 文 档 , 找 到 了 在 功 ½ 上 和
QWidgetFactory 相似的两个类:QUiLoader 和 QFormBuilder。
而其中 load()½数正是 SGEMS ½用的同义而不同名的½数。
QWidget * QFormBuilder:
:load (QIODevice * device,
QWidget * parent = 0 )
QWidget * QUiLoader:
:load (QIODevice * device,
QWidget * parentWidget = 0 )
现在有两种代替 QWidgetFactory 的选择,根据 SGEMS
上下文的½用,采用 QFormBuilder 相对合适。因为在其他地
方 SGEMS 同样½用了 QFormBuilder 一个功½相近的成员½
[7]
4
SGeMS 汉化
目前 SGeMS 的界面是英文的。在汉化的工½上,需要
了解的是 SGeMS 的界面大½上分两部分:
(1)框架界面,程序的主窗口界面,工具栏,菜单条,
停靠工具,三维显示等。
(2)动态生成界面,各个算法的实现界面。
主窗口的界面在程序中是要参与编译过程的。根据 ui 文
件的特性,每次程序编译½生成新的界面.h 文件,所以单纯
的修改程序内部是不可行的。在修改程序内部的同时要将界
面的进行汉化。而对于动态生成界面,只需要将界面汉化即
可,
程序内部不需要改动。
QT4 的 Designer 工具支持在界面
上直接汉化,显示不会出现乱码的现象。
5 结论与不足
SGeMS 编译、平台移植、汉化的过程是一个需要仔细和
耐心的过程。SGeMS 开发与以往开发½件的½式不一样。它
采用了 C++、QT、Python、SoQT 等不同的库文件,而½将
所有的库应用结合到一起,
½成一个统一的整½是很关键的。
在环境的搭建过程中,可½出现各种各样的问题,需要
细心的寻找根源,
否则可½导致 SGeMS 的编译不成功,
或者
部分功½不½½用。在平台移植、汉化的过程中,该方案采
(下½第 38 页)
·38·
计算机与信息技术
dajc.Fill(dsdataSet, "模拟成绩视图")
‘填充和生产报表代码同上,省去
½件纵横
SELECT 模拟次数, 班级, 科目, '最½分' AS 数值类别,
最½分 AS 数值
FROM 模拟成绩
建立的视图如图 7 所示
如果需要,还可以对报表的格式进行自定义设计。
5 结束语
水晶报表技术是实际½件开发中应用很广的技术,改变
了以往程序设计中数据呈现效果单一、
格式设计困难的局面,
上述介绍的各种模式水晶报表和交叉表的实现均通过实际验
证,对½件开发中½用水晶报表具有一定借鉴性。
参考文献
[1] Cate McCoy,Cord Mari.水晶报表 Crystal Reports9 从
图 7 模拟成绩视图
接下来新建一个数据集 DataSet1.xsd,
建立数据源连接并
把新建的视图“模拟成绩视图”拖进来,然后创建报表文件,
注意选择“交叉表”向导类型,下一步在“数据”选项窗口
将视图加到右边框中,点击“下一步”
,在交叉表向导中把班
级、科目字段拖½到行中,把模拟次数、数值类别字段拖到
列中,把数值字段拖到汇总字段中,点击完成,右击报表,
选择“交叉表专家”
,勾选抑制行列总计,这样就设计½了报
表½式。最后在窗½ Load 事件中写相关代码:
‘连接和打开数据库代码同上,省去
Dim dajc As New Data.SqlClient.SqlDataAdapter "select * from
模拟成绩视图", cn)
入门到精通[M].北京:电子工业出版社,2003
[2] 富君,兆文忠,米小珍,翟封祥,黄永生. NET 平台
下水晶报表的应用. 中½水运[J], 2007, 7(6) 168-169
[3] 张晓红. 水晶报表的制½方法. ½宁财专学报[J],
2004, 6(2) 38-39
[4] 石俊萍. 基于 C#水晶报表数据源动态绑定的实现.
(5)
电脑与电信[J], 2009, : 21-22
[5] 任文. 水晶报表的应用. 硅谷[J], 2008, : 44-45
(4)
收稿日期:10 月 15 日
修改日期:12 月 3 日
½者简介:洪颖(1980-)
,男,安½黄山人,讲师,硕
士,研究方向:½络数据库、数据挖掘。
(上接第 34 页)
用的方法也不是最优的,只为读者提供一种全新的学习
SGeMS 的思路。
京:电子工业出版社,2008
[6]
David Vandevoorde,Nicolai M. Josuttis.陈伟柱译
C++ template 中文版.北京,人民邮电出版社.2004.1
[7] Erich Gamma,RIChard Helm,Ralph Johnson,John
Vlissides 著.李英军等译.设计模式[M].北京,机械工业出
版社,2000,1
收稿日期:9 月 25 日
修改日期:11 月 3 日
基金项目:½家自然科学基金项目“曲流河储层建模的
自回避随机游走方法研究”
。项目编号:50874091。
½者简介:赵智宝(1984-)
,男,河北省张家口人,硕
士,主要研究方向计算机½件与理论;张½梁(1977-)
,男,
陕西省户县人,硕士,主要研究方向地质图½可视化;王家
华(1945-)
,男,教授,主要研究方向为地质统计学算法、
油气藏建模、油气田地质图½可视化。
参考文献
[1]
Andrei Alexandrescu , Modern C++ Design.
Addison-Wesley Professional.2001
[2] Erich Gamma,Richard Helm,Ralph Johnson,et al.
Design Patterns : Elements of Reusable Object - Oriented
Software[M]. Addison -Wesley Publising Company.1995
[3]
Bruce Eckel , Chuck Allision.
Thinking in C++
Volume Two : Practical Programming. Pearson Education
[M].2004
[4]
½爱明,张½.C++ primer 中文版 [M].北京:中
½电力出版社
[5] 蔡志明,卢传富,李立夏. 精通 QT4 编程[M].北
展开预览

猜您喜欢

评论

登录/注册

意见反馈

求资源

回顶部

推荐内容

热门活动

热门器件

随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
×