一、配置系統變量及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編譯成功後,執行運行的時候可能會顯示不到界面,且顯示:
原因是運行環境路徑中找不到OCC及其第三方庫的動態庫文件(*.bin),解決的方法有:
- 修改系統環境變量 PATH ,添加動態庫的路徑
- 在Qt Creator中切換到項目模式(Ctrl+5),在構建環境中找到 PATH 變量並添加動態庫路徑到其中