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:自定义交互器类中的访问函数的主要内容,如果未能解决你的问题,请参考以下文章