简介
本文中介绍另一种常用方式来实现基于 OCCT+Qt 的简单的窗口程序,之前的实现方式参考:Open CASCADE+Qt:实现简单的窗口程序(上)。
方式二
方式一中,OCCWidget构造函数中通过获取当前Qt窗口句柄,并创建WNT_Window,从而将OCCT窗口绑定在当前Qt窗口中。
OCCWidget::OCCWidget(QWidget *parent)
: QWidget{
parent}
{
...
// 获取窗口句柄并创建WNT_Window
WId window_handle = (WId) winId();
Handle(WNT_Window) wind = new WNT_Window((Aspect_Handle) window_handle);
// 设置视图窗口
m_view->SetWindow(wind);
if (!wind->IsMapped()) wind->Map();
}
尽管OCCT源文件中有该类对应的源文件以及头文件,但我们在最新版本的OCCT手册中却找不到该类。查看OCCT-7.0.0版本手册,可以看到,WNT_Window继承自Aspect_Window:

从7.1.0版本开始,WNT_Window貌似被取消了:

虽然在源文件中,仍然可以找到该类对应的源文件,但可能处于某种原因,OCCT官方并不推荐原来的方式。
那么我们其实可以从Aspect_Window继承一个新类,Aspect_Window是一个抽象类,参考7.8.0版本的帮助文档,要实现以下其纯虚函数:
virtual void Map () const =0
virtual void Unmap () const =0
virtual Aspect_TypeOfResize DoResize () const =0
virtual Standard_Boolean DoMapping () const =0
virtual Standard_Boolean IsMapped () const =0
virtual Quantity_Ratio Ratio () const =0
virtual void Position (Standard_Integer &X1, Standard_Integer &Y1, Standard_Integer &X2, Standard_Integer &Y2) const =0
virtual void Size (Standard_Integer &Width, Standard_Integer &Height) const =0
virtual Aspect_Drawable NativeHandle () const =0
virtual Aspect_Drawable NativeParentHandle () const =0
virtual Aspect_FBConfig NativeFBConfig () const =0
虚函数的实现参考了WNT_Window源文件以及开源程序Mayo。
OCCT_Window::OCCT_Window(QWidget

最低0.47元/天 解锁文章
3835

被折叠的 条评论
为什么被折叠?



