一、配置系统变量及QMake文件
- 在系统环境变量中添加CASROOT变量,将OpenCASCADE库的目录路径填入变量值中
- 打开Qt Creator新建一个Qt QWidgets Application项目,选择QMainWindow界面
- 编辑 *.pro 文件,将OCC的包含路径、库路径以及具体的库加载到qmake项目中
#Windows系统下编译 win32 { #包含路径 INCLUDEPATH += $$(CASROOT)/inc #确定编译器 win32-msvc2010 { compiler=vc10 } win32-msvc2012 { compiler=vc11 } win32-msvc2013 { compiler=vc12 } win32-msvc2015 { compiler=vc14 } #确定64位或32位系统,增加库的路径 !contains(QMAKE_TARGET.arch, x86_64) { CONFIG(debug, debug|release) { #x86_64 debug LIBS += -L$$(CASROOT)/win32/$$compiler/libd } else { #x86_64 release LIBS += -L$$(CASROOT)/win32/$$compiler/lib } } else { CONFIG(debug, debug|release) { #x86 debug LIBS += -L$$(CASROOT)/win64/$$compiler/libd } else { #x86 release LIBS += -L$$(CASROOT)/win64/$$compiler/lib } } } #添加OCC库 LIBS += -lTKernel -lTKMath -lTKService -lTKV3d -lTKOpenGl \\ -lTKBRep -lTKIGES -lTKSTL -lTKVRML -lTKSTEP -lTKSTEPAttr -lTKSTEP209 \\ -lTKSTEPBase -lTKGeomBase -lTKGeomAlgo -lTKG3d -lTKG2d \\ -lTKXSBase -lTKShHealing -lTKHLR -lTKTopAlgo -lTKMesh -lTKPrim \\ -lTKCDF -lTKBool -lTKBO -lTKFillet -lTKOffset \\
二、创建界面
- 新建一个QWidget界面类
- 编辑头文件
添加OCC相关变量
private:
//!交互式上下文能够管理一个或多个查看器(viewer)中的图形行为和交互式对象的选择
Handle(AIS_InteractiveContext) m_context;
//!定义查看器(viewer)类型对象上的服务
Handle(V3d_Viewer) m_viewer;
//!创建一个视图
Handle(V3d_View) m_view;
//!创建3d接口定义图形驱动程序
Handle(Graphic3d_GraphicDriver) m_graphic_driver;
添加覆写QWidget的事件
protected:
//!覆写绘图事件
void paintEvent(QPaintEvent *);
//!覆写窗口尺寸变化事件
void resizeEvent(QResizeEvent *);
protected:
//!覆写绘图事件
void paintEvent(QPaintEvent *);
//!覆写窗口尺寸变化事件
void resizeEvent(QResizeEvent *);
//!返回窗口的绘制引擎
QPaintEngine *paintEngine() const;
- 编写构造函数
C3DWidget::C3DWidget(QWidget *parent) : QWidget(parent)
{ //若交互式上下文为空,则创建对象
if (m_context.IsNull())
{
//此对象提供与X server的连接,在Windows和Mac OS中不起作用
Handle(Aspect_DisplayConnection) m_display_donnection = new Aspect_DisplayConnection();
//创建OpenGl图形驱动
if (m_graphic_driver.IsNull())
{ m_graphic_driver = new OpenGl_GraphicDriver(m_display_donnection);
}
//获取QWidget的窗口系统标识符
WId window_handle = (WId) winId();
//创建Windows NT 窗口
Handle(WNT_Window) wind = new WNT_Window((Aspect_Handle) window_handle);
//创建3D查看器
m_viewer = new V3d_Viewer(m_graphic_driver, Standard_ExtString("viewer3d")); //创建视图 m_view = m_viewer->CreateView(); m_view->SetWindow(wind); //打开窗口 if (!wind->IsMapped()) { wind->Map(); } m_context = new AIS_InteractiveContext(m_viewer); //创建交互式上下文 //配置查看器的光照 m_viewer->SetDefaultLights(); m_viewer->SetLightOn(); //设置视图的背景颜色为灰色 m_view->SetBackgroundColor(Quantity_NOC_GRAY60); m_view->MustBeResized(); //显示直角坐标系,可以配置在窗口显示位置、文字颜色、大小、样式 m_view->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_GOLD, 0.08, V3d_ZBUFFER); //设置显示模式 m_context->SetDisplayMode(AIS_Shaded, Standard_True); } //配置QWidget setAttribute(Qt::WA_PaintOnScreen); setAttribute(Qt::WA_NoSystemBackground); setBackgroundRole( QPalette::NoRole ); //无背景 setFocusPolicy( Qt::StrongFocus ); setAttribute( Qt::WA_PaintOnScreen ); setAttribute( Qt::WA_NoSystemBackground ); setMouseTracking( true ); //开启鼠标位置追踪 }
- 编写覆写函数
void C3DWidget::paintEvent(QPaintEvent *)
{
m_view->Redraw();
}
void C3DWidget::resizeEvent(QResizeEvent *)
{
if( !m_view.IsNull() )
{
m_view->MustBeResized();
}
}
QPaintEngine *C3DWidget::paintEngine() const
{
return 0;
}
三、编译并运行项目
程序运行效果如下:
四、问题处理
在Qt编译成功后,执行运行的时候可能会显示不到界面,且显示:程序异常结束。\\color{red}{程序异常结束。}
程序异常结束。
原因是运行环境路径中找不到OCC及其第三方库的动态库文件(*.bin),解决的方法有:
- 修改系统环境变量 PATH ,添加动态库的路径
- 在Qt Creator中切换到项目模式(Ctrl+5),在构建环境中找到 PATH 变量并添加动态库路径到其中
项目仓库
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容