Qt 下结合SARibbon、Dock 开发Opencascade应用的基础框架

一、下载编译Qt Ribbon组件SARibbon

SARibbon 下载地址:github - https://github.com/czyt1988/SARibbon

下载后Qt Creator加载SARibbon.pro,编译Debug、Release。

拷贝Debug、Release输出和SARibbon头文件到一个另外一个目录(3rd\include\SARibbon,

3rd\libs\SARibbon)备用:

头文件目录:

库目录:

 

dll文件也拷贝过来,是为了后续方便Qt Creator 中运行程序时找到这些dll。 

二、下载编译Qt Docking 组件Qt-Advanced-Docking-System

Qt-Advanced-Docking-System下载地址:GitHub - githubuser0xFFFF/Qt-Advanced-Docking-System: Advanced Docking System for Qt

下载后Qt Creator 加载ads.pro项目文件,编译Debug。Release。

拷贝Debug、Release输出和Qt-Advanced-Docking-System头文件到一个另外一个目录(3rd\include\AdvancedDocking,3rd\libs\AdvancedDocking)备用。

头文件目录:

库目录:

 

三、下载Opencascade

到opencascade 官网,下载最新的opencascade-7.6.0-vc14-64.exe。下载安装后,拷贝opencascade的头文件、库文件、dll文件到另外一个目录备用

头文件目录:

库文件目录:

 

四、建立一个Widget项目

 

主窗口类选择继承QMainWindow:

五、与SARibbon结合 

5.1 添加SARibbon库

添加后,项目.pro文件会追加如下内容:

 5.2 使用SARibbon

 5.2.1 MainWindow类改为继承SARibbonMainWindow

5.2.2 删除UI中的工具栏

 切记:删除MainWindow.ui的工具栏。

5.3创建Ribbon元素

一切OK,运行后的结果如下:

六、与Qt-Advanced-Docking-System结合

 6.1 添加Qt-Advanced-Docking-System库

添加方法与添加SARibbon库类似,参考执行就OK。

6.2 使用Qt-Advanced-Docking-System

MainWindow类中建立ads::CDockManager(Dock管理器):

创建一个Widget类SinnDockView继承ads::DockWidget。

创建一个Widget类SinnProjectTree继承ads::DockWidget。

添加Dock Widget:

运行的结果:

七、结合Opencascade 

 7.1 添加Opencascade库

过程与添加SARibbon库类似,区别在于安装的opencascade没有debug库文件,添加时需要注意:

添加后,.pro项目文件后添加下面内容:

 7.2 建立一个opencascade 可视化的类SinnView

头文件:

class SinnView : public Standard_Transient

{

    DEFINE_STANDARD_RTTIEXT(SinnViewStandard_Transient)

public:

SinnView(HWND hwnd);

void Redraw();

void MustBeResized();

private:

    Handle(V3d_Viewer)             myViewer;

    Handle(V3d_View)               myView;

    Handle(AIS_InteractiveContextmyContext;

}

cpp文件:

using namespace SinnRBT;

IMPLEMENT_STANDARD_RTTIEXT(SinnView, Standard_Transient)

static Handle(Graphic3d_GraphicDriver)& GetGraphicDriver()

{

  static Handle(Graphic3d_GraphicDriveraGraphicDriver;

  return aGraphicDriver;

}

SinnView::SinnView(HWND hwnd)

{

    //检索OpenGl驱动

    Handle(Aspect_DisplayConnectionaDisplayConnection = new Aspect_DisplayConnection();

    if (GetGraphicDriver().IsNull())

    {

        GetGraphicDriver() = new OpenGl_GraphicDriver(aDisplayConnection);

    }

    //创建适配窗口

    Handle(WNT_Windowwind = new WNT_Window((Aspect_Handlehwnd);

    //创建V3dViewer and V3d_View

    myViewer = new V3d_Viewer(GetGraphicDriver());

    myView = myViewer->CreateView();

    myView->SetWindow(wind);

    if (!wind->IsMapped()) wind->Map();

    //创建交互上下文

    myContext = new AIS_InteractiveContext(myViewer);

    //打开灯光

    myViewer->SetDefaultLights();

    myViewer->SetLightOn();

    //激活2维网格

    this->ActivateGrid();

    //设置视图背景

    myView->SetBgGradientColors(Quantity_NOC_LIGHTSKYBLUEQuantity_NOC_LIGHTSKYBLUE4Aspect_GFM_VER);

    //设置投影方式:透视投影

this->SetProjectionType(Graphic3d_Camera::Projection_Perspective);

//显示坐标

    myView->TriedronDisplay(Aspect_TOTP_LEFT_LOWERQuantity_NOC_GOLD0.08V3d_ZBUFFER);

    //设置显示模式:

    this->SetDisplayMode(AIS_Shaded,Standard_True);

}

void SinnView::Redraw()

{

    if(myView.IsNull())return;

    myView->Redraw();

}

void SinnView::MustBeResized()

{

    if(myView.IsNull())return;

    myView->MustBeResized();

}

7.3 SinnDockView类创建SinnView实例

头文件:

using namespace ads;

class SinnDockView : public CDockWidget

{

public:

SinnDockView();

protected:

    virtual QPaintEnginepaintEngine() const;

    // Paint events.

    virtual void paintEvent(QPaintEventtheEvent);

    virtual void resizeEvent(QResizeEventtheEvent);

private:

    void init();

private:

    Handle(SinnRBT::SinnViewmyView;

}

Cpp文件:

SinnDockView::SinnDockView()

    :CDockWidget("sinnDockView")

{

// No Background

    setBackgroundRoleQPalette::NoRole );

    // set focus policy to threat QContextMenuEvent from keyboard

    setFocusPolicy(Qt::StrongFocus);

    setAttribute(Qt::WA_PaintOnScreen);

    setAttribute(Qt::WA_NoSystemBackground);

    // Enable the mouse tracking, by default the mouse tracking is disabled.

    setMouseTrackingtrue );

    //

    init();

}

void SinnDockView::init()

{

    // Get window handle.

    HWND window_handle = (HWNDwinId();

    myView = new SinnRBT::SinnView(window_handle);

}

/*!

Get paint engine for the OpenGL viewer. [ virtual public ]

*/

QPaintEngineSinnDockView::paintEngine() const

{

    return 0;

}

void SinnDockView::paintEventQPaintEvent/*theEvent*/ )

{

    if(!myView.IsNull())

    {

        myView->Redraw();

    }

}

void SinnDockView::resizeEventQResizeEvent/*theEvent*/ )

{

    if( !myView.IsNull() )

    {

        myView->MustBeResized();

    }

}

运行结果:

  • 3
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
下面是一个使用 OpenCASCADEQt 开发的简单三维显示程序的示例代码: ```cpp #include <QApplication> #include <QWidget> #include <Aspect_Handle.hxx> #include <Graphic3d_GraphicDriver.hxx> #include <OpenGl_GraphicDriver.hxx> #include <V3d_Viewer.hxx> #include <V3d_View.hxx> int main(int argc, char *argv[]) { // 创建 Qt 应用程序 QApplication app(argc, argv); // 创建 Qt 窗口 QWidget window; window.resize(800, 600); window.show(); // 获取窗口的原生句柄 Aspect_Handle hWindow = reinterpret_cast<Aspect_Handle>(window.winId()); // 创建 OpenCASCADE 图形驱动程序 Handle(Graphic3d_GraphicDriver) aGraphicDriver = new OpenGl_GraphicDriver(); // 创建三维视窗 Handle(V3d_Viewer) aViewer = new V3d_Viewer(aGraphicDriver); Handle(V3d_View) aView = aViewer->CreateViewFromWindow("MyView", hWindow); // 设置视窗参数 aView->SetBackgroundColor(Quantity_NOC_GRAY60); aView->MustBeResized(); aView->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_WHITE, 0.08, V3d_ZBUFFER); // 循环显示视窗,直到应用程序退出 while (!app.quitOnLastWindowClosed()) { aView->Redraw(); app.processEvents(); } return app.exec(); } ``` 这个示例代码演示了如何在一个 Qt 窗口中创建一个简单的三维视窗,并设置视窗的背景颜色和坐标轴显示。您可以根据需要自定义窗口的大小和其他参数。 要运行此代码,您需要先安装 QtOpenCASCADE 库,并将其与您的 C++ 项目链接。请确保您已正确配置 QtOpenCASCADE 的环境。 请注意,这只是一个简单的示例,用于说明如何在 Qt 中集成 OpenCASCADE 的三维显示功能。在实际开发中,您可能需要更多的代码来处理用户交互、加载模型文件、添加其他功能等。希望这个示例对您有所帮助!如果您有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值