OSG嵌入IE浏览器:使用QtActiveX控件

来源:互联网 发布:sql中delete是删除什么 编辑:程序博客网 时间:2024/04/28 07:49

一直在qt上进行OSG相关的开发,于是也把OSG嵌入IE浏览器的方式实验了下。
首先,还是OSG先嵌入Qt,此处仍然使用的QGraphicsView体系,详情参见OSGEarth嵌入Qt的QGraphicsView框架,此处不在赘述。
其次,新建Qt的ActiveX项目,如图:
创建Qt ActiveX项目
项目创建成功后,会自动创建一类多继承自public QWdiget, public QAxBindable,其中我们需要把QWidget修改为继承自我们实现的嵌入OSG的Graphics类,代码如下:

class BroswerModels : public GraphicsView, public QAxBindable{    Q_OBJECTpublic:    BroswerModels(QWidget *parent = 0);private:};

由于我们只是实验,所以没有其他别的方法。
实现文件如下:

BroswerModels::BroswerModels(QWidget *parent): GraphicsView(parent){    QString strFile = QFileDialog::getOpenFileName(this, QStringLiteral("模型"), "", "Models (*.osg)");    if (!strFile.isEmpty())    {        osg::ref_ptr<osg::Node> pNode = osgDB::readNodeFile(strFile.toStdString());        this->getRoot()->addChild(pNode);    }}QAXFACTORY_DEFAULT(BroswerModels,       "{40657603-1960-4764-AC97-6AD788CDDDD8}",       "{07F2F6DE-D3A1-4E74-95C0-23C98C43A450}",       "{4A1AC37A-E375-4450-ADEC-82A6900FD6FB}",       "{7CF7BB56-1470-4172-B805-78FE3323BC4F}",       "{CCAEC7E3-D3ED-4C48-BC40-523DC7A30109}")

我是使用的直接打开本地文件查找模型的方式,只有osg格式的,其他的自行添加。
注意:
- “{40657603-1960-4764-AC97-6AD788CDDDD8}”是我们的控件ID,就是我们在 HTML中需要知道的ID;
- “{07F2F6DE-D3A1-4E74-95C0-23C98C43A450}”是Interface的ID;
- “{4A1AC37A-E375-4450-ADEC-82A6900FD6FB}”是Event的ID;
- “{7CF7BB56-1470-4172-B805-78FE3323BC4F}”是TypeLib的ID;
- “{CCAEC7E3-D3ED-4C48-BC40-523DC7A30109}”是APP的ID。
最后,让我们来写一个网页来测试下效果:

<HTML>  <HEAD>  <TITLE>Model Broswer</TITLE>  <style>    body{        padding:0px;        margin:0px;        overflow:hidden;        }    </style></HEAD><OBJECT ID="ModelBroswerControl" width="100%" height="100%" classid="CLSID:40657603-1960-4764-AC97-6AD788CDDDD8">      <PARAM NAME="_Version" VALUE="65536">      <PARAM NAME="_ExtentX" VALUE="12806">      <PARAM NAME="_ExtentY" VALUE="1747">      <PARAM NAME="_StockProps" VALUE="0">  </OBJECT></HTML>  

运行效果如下:
glider.osg
PS:这里面还有不少的瑕疵,比如:IE浏览器的安全提示,比如选择文件的不方便等等需要进一步研究了。

1 0
原创粉丝点击