<div dir="ltr">Hi,<div><br></div><div style>Yes. I have this so far and further more I want to realize a mouseEvent callback in the main class.</div><div style><br></div><div style><div> connection = vtkSmartPointer<vtkEventQtSlotConnect>::New();</div>
<div> </div><div> connection->Connect(this->ui->qvtkWidget_1->GetInteractor(),</div><div> vtkCommand::MouseMoveEvent,</div><div> this,</div><div> SLOT(mouseMoveCallback(vtkObject*,ulong,void*,void*,vtkCommand*)),</div>
<div> NULL,2.0);</div><div><br></div><div><br></div><div> void Viewer::mouseMoveCallback(vtkObject * obj, unsigned long,</div><div> void * client_data, void *,</div><div> vtkCommand * command)</div></div><div style><pre style="margin-top:0px;margin-bottom:0px">
<pre style="margin-top:0px;margin-bottom:0px"><pre style="margin-top:0px;margin-bottom:0px"><br></pre><pre style="margin-top:0px;margin-bottom:0px"><font face="arial, helvetica, sans-serif">The thing is I have three qvtkWidget and how can I let slot function know which one's interactor is calling?</font></pre>
<pre style="margin-top:0px;margin-bottom:0px"><font face="arial, helvetica, sans-serif"><br></font></pre><pre style="margin-top:0px;margin-bottom:0px"><font face="arial, helvetica, sans-serif"><br></font></pre><pre style="margin-top:0px;margin-bottom:0px">
<font face="arial, helvetica, sans-serif">Sun Tao</font></pre></pre></pre></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/5/28 David Doria <span dir="ltr"><<a href="mailto:daviddoria@gmail.com" target="_blank">daviddoria@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Tue, May 28, 2013 at 8:29 AM, tao sun <<a href="mailto:colddiesun@gmail.com">colddiesun@gmail.com</a>> wrote:<br>
> Hi,<br>
><br>
</div><div class="im">> I overload mouseEvents as functions of the vtkInteractorStyleImage subclass.<br>
> Do you mean I should name a member to indicate the current interactor and<br>
> QVtkWidget? How could a slot function of the mouseevent know that which<br>
> QvtkWidget's interactor call it?<br>
><br>
><br>
> Thanks,<br>
> Sun Tao<br>
<br>
<br>
</div>I was talking about something like this:<br>
<br>
#include "SideBySideRenderWindowsQt.h"<br>
<br>
#include <vtkDataObjectToTable.h><br>
#include <vtkElevationFilter.h><br>
#include <vtkPolyDataMapper.h><br>
#include <vtkQtTableView.h><br>
#include <vtkRenderer.h><br>
#include <vtkRenderWindow.h><br>
#include <vtkSphereSource.h><br>
#include <vtkCubeSource.h><br>
#include <vtkSmartPointer.h><br>
#include <vtkInteractorStyleTrackballCamera.h><br>
<br>
// Define interaction style<br>
class MyInteractorStyle : public vtkInteractorStyleTrackballCamera<br>
{<br>
public:<br>
static MyInteractorStyle* New();<br>
vtkTypeMacro(MyInteractorStyle, vtkInteractorStyleTrackballCamera);<br>
<br>
void SetName(const std::string& styleName)<br>
{<br>
this->StyleName = styleName;<br>
}<br>
<br>
virtual void OnMouseMove()<br>
{<br>
// Just get the address<br>
std::cout << "OnMouseMove() in " << this << std::endl;<br>
<br>
// Get the "name"<br>
std::cout << "OnMouseMove() in " << this->StyleName << std::endl;<br>
<br>
// Forward events<br>
vtkInteractorStyleTrackballCamera::OnMouseMove();<br>
}<br>
<br>
private:<br>
std::string StyleName;<br>
};<br>
<br>
vtkStandardNewMacro(MyInteractorStyle);<br>
<br>
// Constructor<br>
SideBySideRenderWindowsQt::SideBySideRenderWindowsQt()<br>
{<br>
this->setupUi(this);<br>
<br>
// Sphere<br>
vtkSmartPointer<vtkSphereSource> sphereSource =<br>
vtkSmartPointer<vtkSphereSource>::New();<br>
sphereSource->Update();<br>
vtkSmartPointer<vtkPolyDataMapper> sphereMapper =<br>
vtkSmartPointer<vtkPolyDataMapper>::New();<br>
sphereMapper->SetInputConnection(sphereSource->GetOutputPort());<br>
vtkSmartPointer<vtkActor> sphereActor =<br>
vtkSmartPointer<vtkActor>::New();<br>
sphereActor->SetMapper(sphereMapper);<br>
<br>
// Cube<br>
vtkSmartPointer<vtkCubeSource> cubeSource =<br>
vtkSmartPointer<vtkCubeSource>::New();<br>
cubeSource->Update();<br>
vtkSmartPointer<vtkPolyDataMapper> cubeMapper =<br>
vtkSmartPointer<vtkPolyDataMapper>::New();<br>
cubeMapper->SetInputConnection(cubeSource->GetOutputPort());<br>
vtkSmartPointer<vtkActor> cubeActor =<br>
vtkSmartPointer<vtkActor>::New();<br>
cubeActor->SetMapper(cubeMapper);<br>
<br>
// VTK Renderer<br>
vtkSmartPointer<vtkRenderer> leftRenderer =<br>
vtkSmartPointer<vtkRenderer>::New();<br>
leftRenderer->AddActor(sphereActor);<br>
<br>
vtkSmartPointer<vtkRenderer> rightRenderer =<br>
vtkSmartPointer<vtkRenderer>::New();<br>
<br>
// Add Actor to renderer<br>
rightRenderer->AddActor(cubeActor);<br>
<br>
// VTK/Qt wedded<br>
vtkSmartPointer<MyInteractorStyle> leftInteractorStyle =<br>
vtkSmartPointer<MyInteractorStyle>::New();<br>
leftInteractorStyle->SetName("Left");<br>
<br>
vtkSmartPointer<MyInteractorStyle> rightInteractorStyle =<br>
vtkSmartPointer<MyInteractorStyle>::New();<br>
rightInteractorStyle->SetName("Right");<br>
<br>
this->qvtkWidgetLeft->GetInteractor()->SetInteractorStyle(leftInteractorStyle);<br>
this->qvtkWidgetRight->GetInteractor()->SetInteractorStyle(rightInteractorStyle);<br>
<br>
this->qvtkWidgetLeft->GetRenderWindow()->AddRenderer(leftRenderer);<br>
this->qvtkWidgetRight->GetRenderWindow()->AddRenderer(rightRenderer);<br>
<br>
// Set up action signals and slots<br>
connect(this->actionExit, SIGNAL(triggered()), this, SLOT(slotExit()));<br>
}<br>
<br>
void SideBySideRenderWindowsQt::slotExit()<br>
{<br>
qApp->exit();<br>
}<br>
<br>
Is that not where you need the information about which window is in use?<br>
<span class="HOEnZb"><font color="#888888"><br>
David<br>
</font></span></blockquote></div><br></div>