2016-11-24 5 views
0

私はMainWindowというQt GUIを持っています。Qt/VTK:カスタムインタラクタクラスのアクセス機能

私はMainWindowのコンストラクタでいくつかの3Dオブジェクトをレンダリングしています。 さらに、vtkInteractorStyleTrackballCameraのカスタムクラスをMainWindow.cppのように宣言しました。this exampleのようになりました。

ここで、関数OnLeftButtonDown()MainWindowクラスの関数を、自分のカスタムクラスのInteractorから呼び出したいと思います。

私はこのようなカスタムタラクタークラスにMainWindowクラスを継承しようとした:

class customMouseInteractorStyle : public vtkInteractorStyleTrackballCamera, MainWindow 

しかし、これは動作しません。

ここでMainWindowの機能にアクセスするにはどうすればよいですか?

マウスの左ボタンを押すと、この機能が自動的に呼び出されます。

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

をこの作業を行うには、最初のメンバ変数を追加します:

private: 
    MainWindow *mainWin; 

そして、コンストラクタを変更するあなたは、このコンストラクタを持っていると言うので、あなたの特定の質問に答えるために

// 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) : mainWin(ptr) {} 

次に、あなたのOnRightButtonDownは次のようになります。

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

ありがとうございます! – Brian

関連する問題