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:没有合适的默认构造函数可用(自定义交互器)的主要内容,如果未能解决你的问题,请参考以下文章