您的位置:首页 > 编程语言 > Qt开发

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

2015-07-28 21:54 495 查看
一直在qt上进行OSG相关的开发,于是也把OSG嵌入IE浏览器的方式实验了下。

首先,还是OSG先嵌入Qt,此处仍然使用的QGraphicsView体系,详情参见OSGEarth嵌入Qt的QGraphicsView框架,此处不在赘述。

其次,新建Qt的ActiveX项目,如图:



项目创建成功后,会自动创建一类多继承自
public QWdiget, public QAxBindable
,其中我们需要把QWidget修改为继承自我们实现的嵌入OSG的Graphics类,代码如下:

class BroswerModels : public GraphicsView, public QAxBindable
{
Q_OBJECT

public:
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>


运行效果如下:



PS:这里面还有不少的瑕疵,比如:IE浏览器的安全提示,比如选择文件的不方便等等需要进一步研究了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: