• 7913阅读
  • 6回复

工业自动化软件设计 之五 Ice与slice2qt [复制链接]

上一主题 下一主题
离线myer
 

只看楼主 倒序阅读 楼主  发表于: 2011-12-07
通讯可以讨论的地方很多,今天仅就Ice(参考zeroc.com)通讯中间件,以及其与Qt的协作随便说说。
一个程序中同时用到Qt和Ice库,做为server有大概3种方法:
1、使用qapplication,将Ice的Ice::Application.main()放在一个QTread的run函数;
     以Qt库为主,但是Ice所在线程没法处理Qt的消息,一般也不需要,对大多数情况足够了,并且没有发现什么运行不正确的地方;
2、不适用Qt::Application,仅使用Qt的QString、QSql、QPlugin等便利的函数;
    以Ice库为主,Qt的消息机制无效,如果仅使用Qt的类方便处理,也是个不错的选择;
3、可以将Qt、Ice的消息处理融合起来,需要比较高的技巧;

如果仅是Qt的Gui程序,不需要创建Ice的adapter,也有几种方法:
1、直接在Qt的函数里,proxy->dosth(),遇到超时函数,界面无响应;这种方法简单直接;
2、调用放在线程里,注意如果要刷新GUI,则需要用qApp->postEvent();这也是比较简单的方法;
3、用Ice的异步调用,可以参考Ice的相关文档

由于slice2cpp生成的代码,用的是标准c++库,最常用的类型string、map、vector,每次在调用接口时转来转去相当麻烦,有没有可能直接生成QString、QMap、QVector、QStringList呢?
答案是当然可以,并且用slice2qt生成的代码,和其它python等程序通讯也没有任何问题
网上有个开源项目就是slice2qt,自从3.2.1后就没更新了
归纳一下其实现步骤:
1、使用或修改Ice的标准slice2cpp项目;
2、生成文件时,包含QString、QMap、QVector等相应头文件
3、类型为string的输出为QString,同时修改其__read、__write的实现;
4、类型为vector<string>的输出为QStringList;
5、其它类型为vector<T>的输出为QVector,如果用QList,则需要处理,resize()函数;
6、类型为map的输出为QMap
7、为QVector和QMap的新类型,增加operator<()函数;
8、修改其QMap的新类型__read、__write实现。

以上在Ice3.4.2和Qt4.7.4使用,没发现什么问题,Qt+Ice实现的服务,用python调用,正常。
http://user.qzone.qq.com/56430808
离线xinqingfly

只看该作者 1楼 发表于: 2011-12-07
没用过zeroc,以后研究研究
菜鸟也是鸟
离线goready

只看该作者 2楼 发表于: 2012-12-04

楼主能否再深入谈一下,Qt GUI + Ice中间件的配合,关于这方面的资料较少.或者指出一些参考资料,多谢!
如何使用Qt代替Ice::Application 的createSession runWithSession等。



server端的话一般也需要使用Qt结合吗?

离线goready

只看该作者 3楼 发表于: 2012-12-04
看到一个方法: http://www.zeroc.com/forums/projects/5009-ice-3-4-0-ami-qt-4-5-a.html

没搞懂,简单的都不会,大神指点一二

    ChatClient app;

    Ice::InitializationData initData;
    initData.dispatcher = new QtDispatcher;

    return app.main( argc, argv, initData );

    //return app.main(argc, argv, "config.client");

原来的配置文件都不知道该怎么传给 Glacier2::Application了
在线XChinux

只看该作者 4楼 发表于: 2012-12-04
ICE是个好东西,用它写过几个项目。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线goready

只看该作者 5楼 发表于: 2012-12-06

研究了一下

貌似目前最新的技术是使用 Dispatcher 及 AMI 调用方式。
这种方法可以在Qt的事件循环里直接进行。
离线渡世白玉

只看该作者 6楼 发表于: 2014-03-28
、可以将Qt、Ice的消息处理融合起来,需要比较高的技巧;

不知楼主还在不,问下这个消息融合起来处理给点思路,谢谢、、、、、、、、、
快速回复
限100 字节
 
上一个 下一个