一、配置系统变量及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 *);
//!返回窗口的绘制引擎
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 变量并添加动态库路径到其中