Qt/VTK:没有合适的默认构造函数可用(自定义交互器)

Posted

技术标签:

【中文标题】Qt/VTK:没有合适的默认构造函数可用(自定义交互器)【英文标题】:Qt/VTK: No appropriate default constructor available (custom interactor) 【发布时间】:2016-11-24 15:54:15 【问题描述】:

我有一个名为 MainWindow 的 GUI,我在构造函数中渲染了一些东西。 在这个构造函数之上,我声明了一个自定义的交互器类来实现函数 OnRightButtonDown()。 在这个函数中,我想从我的 MainWindow 类中调用一个函数。

当我运行代码时出现错误:

“没有合适的默认构造函数可用”

引用这一行的发生:

vtkStandardNewMacro(customMouseInteractorStyle);

如何更改代码以启用带参数的构造函数?

    class customMouseInteractorStyle : public vtkInteractorStyleTrackballCamera
    
    public:
        static customMouseInteractorStyle* New();
        vtkTypeMacro(customMouseInteractorStyle,   vtkInteractorStyleTrackballCamera);
        MainWindow *mainWin;

        customMouseInteractorStyle(MainWindow *ptr) : mainWin(ptr)
        

        

        virtual void OnRightButtonDown()
        
            mainWin->function();
            vtkInteractorStyleTrackballCamera::OnRightButtonDown();
        
    ;
    vtkStandardNewMacro(customMouseInteractorStyle);

Test1::Test1(QWidget *parent)
    : QMainWindow(parent)

       //Rendering
       ....
       //

    vtkSmartPointer<customMouseInteractorStyle> style =   //My custom class!!!
    vtkSmartPointer<customMouseInteractorStyle>::New();
    renderWindowInteractor->SetInteractorStyle(style);

    renderWindow->Render();
    renderWindowInteractor->SetRenderWindow(renderWindow);
    renderWindowInteractor->Initialize();



void MainWindow::function()


【问题讨论】:

customMouseInteractorStyle 的构造函数:customMouseInteractorStyle(MainWindow *ptr) 需要无参数 customMouseInteractorStyle() 使用单独的函数来设置指向 MainWindow 的指针。 如何初始化?这是不允许的: void ptr_function(MainWindow *ptr) : mainWindow(ptr) 【参考方案1】:
 class customMouseInteractorStyle : public vtkInteractorStyleTrackballCamera
    
    public:
        static customMouseInteractorStyle* New();
        vtkTypeMacro(customMouseInteractorStyle,   vtkInteractorStyleTrackballCamera);
        MainWindow *mainWin;

        customMouseInteractorStyle()
        

        

        void  function(MainWindow *ptr)
        
           mainWin = ptr;
        

        virtual void OnRightButtonDown()
        
            mainWin->function();
            vtkInteractorStyleTrackballCamera::OnRightButtonDown();
        
    ;
    vtkStandardNewMacro(customMouseInteractorStyle);

Test1::Test1(QWidget *parent)
    : QMainWindow(parent)

       //Rendering
       ....
       //

    vtkSmartPointer<customMouseInteractorStyle> style =   //My custom class!!!
    vtkSmartPointer<customMouseInteractorStyle>::New();
    renderWindowInteractor->SetInteractorStyle(style);
    style->function(this);

    renderWindow->Render();
    renderWindowInteractor->SetRenderWindow(renderWindow);
    renderWindowInteractor->Initialize();



void MainWindow::function()


【讨论】:

以上是关于Qt/VTK:没有合适的默认构造函数可用(自定义交互器)的主要内容,如果未能解决你的问题,请参考以下文章

error C2512: 没有合适的默认构造函数可用

c++没有合适的默认构造函数可用

错误 C2512:'Building':没有合适的默认构造函数可用

错误 C2512:没有合适的默认构造函数可用(不是类)

编译器错误:没有合适的默认构造函数可用

错误 C2512 没有合适的默认构造函数,即使我有一个?