Qt/VTK:访问自定义交互器中的函数 class

Qt/VTK: Access functions in custom interactor class

我有一个名为 MainWindow 的 Qt GUI。

我正在 MainWindow 的构造函数中渲染一些 3D 对象。 此外,我在 MainWindow.cpp 中声明了 vtkInteractorStyleTrackballCamera 的自定义 class,就像在 this example.

中一样

现在我想从 MainWindow class 中的函数 OnLeftButtonDown() 从我自定义的 class Interactor 中调用一个函数。

我尝试将 MainWindow class 继承到自定义交互器 class,如下所示:

class customMouseInteractorStyle : public vtkInteractorStyleTrackballCamera, MainWindow

但这行不通。

如何访问 MainWindow 的功能?

按下鼠标左键时自动调用该函数

// Define interaction style
class customMouseInteractorStyle : public vtkInteractorStyleTrackballCamera
{
public:
    static customMouseInteractorStyle* New();
    vtkTypeMacro(customMouseInteractorStyle,     vtkInteractorStyleTrackballCamera);

    virtual void OnRightButtonDown()
    {
        MainWindowfunction();    // <- I want to call this
        vtkInteractorStyleTrackballCamera::OnRightButtonDown();
    }

};

vtkStandardNewMacro(customMouseInteractorStyle);


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
      // Rendering some things
}

void MainWindow::MainWindowfunction
{
// Do something
}

为了回答你的具体问题,所以你说你有这个构造函数:

customMouseInteractorStyle(MainWindow *ptr) { ptr->MainWindowfunction(); }

要使这个工作,首先添加一个成员变量:

private:
    MainWindow *mainWin;

然后更改构造函数对其进行初始化:

customMouseInteractorStyle(MainWindow *ptr) : mainWin(ptr) {}

然后你的OnRightButtonDown变成:

virtual void OnRightButtonDown()
{
    mainWin->MainWindowfunction();
    vtkInteractorStyleTrackballCamera::OnRightButtonDown();
}