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();

    }

}

运行结果:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值