2016-11-24 82 views
0

訪問功能我有一個Qt的圖形用戶界面稱爲主窗口。QT/VTK:在客戶交互器類

我在構造函數MainWindow中渲染一些3D對象。 此外,我在MainWindow.cpp中聲明瞭vtkInteractorStyleTrackballCamera的自定義類,如this example

現在我想從我的Interactor的自定義類中調用功能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 
} 
+0

是'OnLeftButtonDown()'調用另一個線程? – hyde

+0

此外,你應該表現出你的'OnLeftButtonDown()'方法的代碼。 「這不起作用」是一個非常糟糕的錯誤描述,你是什麼意思?你不能讓它編譯?它崩潰?什麼? – hyde

+0

謝謝您的回答!我添加了一些代碼,希望這有助於理解我的問題。 它不工作,我可以編譯,但不能進行調試手段(窗口沒有打開,一切都變得緩慢)。對不準確的描述 – Brian

回答

0

爲了回答您的具體問題,所以你說你有這樣的構造:

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

爲了使這項工作,首先添加一個成員變量:

private: 
    MainWindow *mainWin; 

然後改變構造初始化它:

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

那麼你OnRightButtonDown變爲:

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

非常感謝! – Brian