【问题标题】:Qt/VTK: Access functions in custom interactor classQt/VTK:自定义交互器类中的访问函数
【发布时间】:2016-11-24 11:57:25
【问题描述】:

我有一个名为 MainWindow 的 Qt GUI。

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

现在我想从我的自定义交互器类中的函数OnLeftButtonDown() 中调用MainWindow 类中的一个函数。

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

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
}

【问题讨论】:

  • OnLeftButtonDown() 是否在另一个线程中调用?
  • 另外,您应该显示您的 OnLeftButtonDown() 方法的代码。而“这不起作用”是一个非常糟糕的错误描述,你到底是什么意思?你不能让它编译吗?它崩溃了吗?什么?
  • 感谢您的回答!我添加了一些代码,希望这有助于理解我的问题。它不起作用意味着我可以编译但不能调试(窗口没有打开,一切都变慢了)。很抱歉描述不准确
  • 在构造自定义类时,将MainWindow的指针或引用传递给构造函数,并将其存储为类成员变量。然后,您可以从自定义类中的任何位置调用 MainWindow 上的公共函数。
  • 谢谢!!如何将其存储为类成员变量? (对不起,我是 C++ 新手)

标签: c++ qt vtk


【解决方案1】:

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

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

要做到这一点,首先添加一个成员变量:

private:
    MainWindow *mainWin;

然后改变构造函数来初始化它:

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

那么你的OnRightButtonDown就变成了:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 2021-07-10
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    相关资源
    最近更新 更多