网站建设协议书怎么写,管理部门网站建设说明书,wordpress 打不开,目前最火的推广平台这几天在试着使用QT做编辑器#xff0c;然后打算使用Irrlicht作为渲染引擎。结果在集成的时候遇到了问题。 使用了Irrlicht论坛里面有人提供的QIrrlichtWidget#xff0c;结果什么都画不出来。仔细跟踪了一下#xff0c;结果是IDirect3DDevice9的Present函数返回了E_FAIL。 … 这几天在试着使用QT做编辑器然后打算使用Irrlicht作为渲染引擎。结果在集成的时候遇到了问题。 使用了Irrlicht论坛里面有人提供的QIrrlichtWidget结果什么都画不出来。仔细跟踪了一下结果是IDirect3DDevice9的Present函数返回了E_FAIL。 查了下文档文档只说是内部错误没有说具体会是什么原因造成的。网上找原因按照大家说的使用D3D的debug模式看到了如下的输出信息 Direct3D9: (ERROR) :GetClientRect Failed ?Direct3D9: (ERROR) :GetClientRect Failed ?Direct3D9: (ERROR) :BitBlt or StretchBlt failed in Present 有人遇到了类似的问题是先销毁窗口然后继续使用Present函数就会这样于是我就怀疑到是不是窗口系统出了什么问题。 结果发现了在创建device的时候获得的winId()竟然和Present的时候的winId()不同。 于是我怀疑是我使用QT的窗口系统不当初始化的时候获得了跟显示出Widget时不同的winId导致最后Present失败。 于是我使用了下列代码做了实验代码如下 1 QApplication app(argc, argv); 2 3 MainWindow mainWin; 4 5 QVBoxLayout *layout new QVBoxLayout(); 6 7 QIrrlichtWidget* irrWidget new QIrrlichtWidget(); 8 QIrrlichtWidget* irrWidget1 new QIrrlichtWidget(); 9 10 HWND id1 irrWidget-winId();11 12 layout-addWidget(irrWidget); 13 layout-addWidget(irrWidget1); 14 15 //如果初始化代码在这里就会导致Present失败什么都绘制不出来16 //irrWidget-init(); 17 //irrWidget1-init(); 18 //setupIrrlicht( irrWidget-getIrrlichtDevice() ); 19 //setupIrrlicht( irrWidget1-getIrrlichtDevice() );20 21 HWND id2 irrWidget-winId();22 23 mainWin.centralwidget-setLayout(layout);24 25 //在这里winId()的返回值就不同了26 HWND id3 irrWidget-winId();27 28 mainWin.resize(400,400); 29 30 HWND id4 irrWidget-winId();31 32 //在拥有了正确的winId之后就可以初始化设备了33 irrWidget-init(); 34 irrWidget1-init(); 35 36 setupIrrlicht( irrWidget-getIrrlichtDevice() ); 37 setupIrrlicht( irrWidget1-getIrrlichtDevice() );38 39 mainWin.show();40 41 HWND id7 irrWidget-winId();42 43 return app.exec(); 上述代码将两个QIrrlichtWidget垂直排列放到一个QVBoxLayout中init方法就是初始化设备setupIrrlicht是向场景中添加些绘制的元素代码都是参照 http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t15112postdays0postorderaschighlightqirrlichtwidgetstart0sidce09058e811438f511b01b2449e2ba71 来写的。 上面的代码注释中标记了什么时候winId改变了以及错误的初始化位置。我没有深入研究QT中winId相关的内容只是知道了以后要在什么时候初始化以防再次遇到这样的问题。 特此记录下来与大家分享。 转载于:https://www.cnblogs.com/baixiaohu/archive/2011/02/28/1967540.html