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
我也试着重新解释_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_cast
或dynamic_cast
。reintepret_cast
不起作用,因为这两个不相关的基类的基地址不相同。
只有正确的造型才能正常工作。
然后,您需要使用innerCamera.Get()
来获得一个指针,该指针可以真正转换为QObject*
,因为使用原始智能指针无法做到这一点。
相关文章:
- Qt VTK交互风格的信号到小部件
- 如果禁用小部件,则无法发送信号
- 如何使自定义小部件中的子小部件的信号可连接?
- 带有自定义小部件的 QListWidget - 不触发项目点击信号
- 在QT中,接收到子小部件产生的信号后,如何从父小部件中删除子小部件?
- 当对话框中的任何小部件发出信号时,是否可以调用插槽
- 多个小部件的信号和插槽
- 如何在小部件大小更改时获取信号
- C++ 创建小部件数组
- 从Wt小部件信号事件运行popen()时出现问题
- C++/QT 值创建旋转框小部件时更改(整数)信号
- 每个 QT 小部件都有'show'信号吗?
- 寻找一个用于信号处理的良好的C/C++小波库
- 是否符合C++以及如何从信号中删除小部件
- GTK3如何将一个信号连接到多个窗口小部件
- Qt:访问uitools/uiloader生成的小部件的信号/插槽
- 动态创建自定义小部件的新实例并连接信号和插槽(Qt)
- Qt:如何为所有小部件和小部件类型实现通用基类信号/插槽功能(通过虚拟基类插槽)
- 如何为所有qlineedit设置onclick信号以打开键盘小部件并发回数据
- QT小部件插槽调用没有被单独的线程信号激活