Qt-VTK 交互样式信号到小部件

Qt-VTK interaction style signal to widget

我正在尝试将自定义交互样式信号连接到主窗口小部件插槽。

头文件

class interactorCamera : public QObject, public vtkInteractorStyleTrackballCamera
{
    Q_OBJECT
public:
    static interactorCamera* New();
    interactorCamera();
    virtual void OnLeftButtonDown();

signals:
    void signalOut();

};

class mainWidget : public QVTKOpenGLWidget
{
    Q_OBJECT
public:
    explicit sceneWidget(QWidget *parent = 0);
    ~sceneWidget();

public slots:
    void getSignal();

};

源文件

vtkStandardNewMacro(interactorCamera);

interactorCamera::interactorCamera(){
}

void interactorCamera::OnLeftButtonDown(){
    vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
    qInfo() << "Camera Interactor Left Down";
    emit trialsignal();
}


sceneWidget::sceneWidget(QWidget *parent)  QVTKOpenGLWidget(parent)
{
    // Camera, renderer, source initialization and so on...
    // ...

    vInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    vInteractor->SetRenderWindow(GetRenderWindow());
    vtkSmartPointer<interactorCamera> interCamera = vtkSmartPointer<interactorCamera>::New();
    vInteractor->SetInteractorStyle(interCamera);

    connect(&interCamera, SIGNAL(trialsignal()), this, SLOT(getInteraction()));
    vInteractor->Initialize();
    vInteractor->Start();
}

我似乎无法连接正确的类型,而且我不知道该怎么做。 我得到的错误

error: C2664: 'QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const': cannot convert argument 1 from 'vtkSmartPointer<interactorCamera> *' to 'const QObject *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

我也试过 reinterpret_cast 但没成功。

connect(reinterpret_cast<QObject*>(interCamera), SIGNAL(trialsignal()), this, SLOT(getInteraction()));

这次错误是

error: C2440: 'reinterpret_cast': cannot convert from 'vtkSmartPointer<interactorCamera>' to 'QObject *'
Conversion requires a constructor or user-defined-conversion operator, which can't be used by const_cast or reinterpret_cast

我该如何解决?

使用static_castdynamic_castreintepret_cast 不会起作用,因为这两个不相关的基类的基地址不同。

只有适当的转换才能正常工作。

然后你需要使用 innerCamera.Get() 来获得一个你可以真正转换为 QObject* 的指针,因为你不能用原始的智能指针做到这一点。