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

Posted

技术标签:

【中文标题】Qt/VTK:自定义交互器类中的访问函数【英文标题】:Qt/VTK: Access functions in custom interactor class 【发布时间】: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++ 新手) 【参考方案1】:

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

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

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

private:
    MainWindow *mainWin;

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

customMouseInteractorStyle(MainWindow *ptr) : mainWin(ptr) 

那么你的OnRightButtonDown就变成了:

virtual void OnRightButtonDown()

    mainWin->MainWindowfunction();
    vtkInteractorStyleTrackballCamera::OnRightButtonDown();

【讨论】:

以上是关于Qt/VTK:自定义交互器类中的访问函数的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖自定义管理器类中的 .update() 方法

自定义迭代器类与生成器?

17类的自定义属性访问及动态属性设置

初始化后访问自定义 UIButton 类中的插座

Python如何调用自定义类中的函数?

如何访问使用 Paintcode 生成的 UIView 自定义类中的图层?