Сигнал стиля взаимодействия Qt-VTK с виджетом - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь подключить настроенный сигнал стиля взаимодействия к основному слоту виджета.

Заголовочный файл

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

Я тоже пытался переинтерпретировать_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

Как я могу решить это?

1 Ответ

0 голосов
/ 04 ноября 2018

Используйте static_cast или dynamic_cast. reintepret_cast не будет работать, потому что базовые адреса этих двух несвязанных базовых классов не совпадают.

Только правильные приведения будут работать правильно.

Затем вам нужно использовать innerCamera.Get(), чтобы получить указатель, который вы действительно можете привести к QObject*, поскольку вы не можете сделать это с оригинальным умным указателем.

...