Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 连接用户自定义函数以使用Qt小部件修改VTK对象_C++_Qt_Vtk_Qvtkwidget - Fatal编程技术网

C++ 连接用户自定义函数以使用Qt小部件修改VTK对象

C++ 连接用户自定义函数以使用Qt小部件修改VTK对象,c++,qt,vtk,qvtkwidget,C++,Qt,Vtk,Qvtkwidget,我目前正在进行一个项目的转换,该项目最初是在python下完成的,它允许使用基本上由滑块组成的Qt接口修改.vtk文件的可视化。python下的项目是功能性的,可在此处查阅: [https://github.com/sebgra/VTK_modelisation/blob/master/Projet_Modelisation_Bovio_Gradit.py][1] 我在使用“个人”功能将滑块连接到vtk渲染器时遇到问题。在python下,只需使用以下各项即可完成连接: def modif1():

我目前正在进行一个项目的转换,该项目最初是在python下完成的,它允许使用基本上由滑块组成的Qt接口修改.vtk文件的可视化。python下的项目是功能性的,可在此处查阅:

[https://github.com/sebgra/VTK_modelisation/blob/master/Projet_Modelisation_Bovio_Gradit.py][1]

我在使用“个人”功能将滑块连接到vtk渲染器时遇到问题。在python下,只需使用以下各项即可完成连接:

def modif1():
        contour_bone.SetValue(0, Slider_1.value())
        iren.ReInitialize()
 
Slider_1 = QSlider(QtCore.Qt.Horizontal)
    Slider_1.setMinimum(0)
    Slider_1.setMaximum(200)
    Slider_1.setValue(90)
    Slider_1.valueChanged.connect(Display_1.display)
    Slider_1.valueChanged.connect(modif1)
 
# avec iren défini comme
 
mapper_bone=vtk.vtkPolyDataMapper()
    mapper_bone.SetInputConnection(contour_bone.GetOutputPort())  
    mapper_bone.SetLookupTable(lut_bone)
 
    mapper_skin=vtk.vtkPolyDataMapper()
    mapper_skin.SetInputConnection(contour_skin.GetOutputPort())
    mapper_skin.SetLookupTable(lut_skin)
 
    actor_bone=vtk.vtkActor()
    actor_bone.SetMapper(mapper_bone)
 
    actor_skin=vtk.vtkActor()
    actor_skin.SetMapper(mapper_skin)
 
    ren = vtk.vtkRenderer()
    vtkWidget.GetRenderWindow().AddRenderer(ren)
 
    iren = vtkWidget.GetRenderWindow().GetInteractor()
 
 
 
    ren.AddActor(actor_bone)
    ren.AddActor(actor_skin)
    ren.ResetCamera()
    frame.setLayout(vl)
    #setCentralWidget(self.frame)
    #show()
    iren.Initialize()
    iren.Start()
    iren.ReInitialize()
这个等价物上有C++等价物:

[https://github.com/sebgra/VTK_Modelisation_CPP/blob/master/src/StructuredPointsReader.cxx][1]

通过以下方式将modif_1定义为主外:

void modif_1(QSlider *m_Slider, vtkSmartPointer<vtkContourFilter> m_ContourFilter, vtkRenderWindowInteractor* m_iren  ){
 
  // m_ContourFilter -> setValue(0,m_Slider -> value());
  // m_iren -> ReInitialize();
  std::cout << "done" << endl;
}
void modif_1(QSlider*m_滑块、vtkSmartPointer m_轮廓过滤器、vtkRenderWindowInteractor*m_iren){
//m_轮廓过滤器->设置值(0,m_滑块->值());
//m_iren->重新初始化();
std::cout Update();
VTKSmart\u皮肤=
vtkSmartPointer::New();
contour_skin->SetInputConnection(读卡器->GetOutputPort());
轮廓皮肤->设置轮廓数(1);
轮廓皮肤->设定值(0,50.0);
VTKSmart指针映射器\u皮肤=
vtkSmartPointer::New();
mapper_skin->SetInputConnection(轮廓_skin->GetOutputPort());
映射器皮肤->可设置可查找(lut皮肤);
VTKSmart\u皮肤=
vtkSmartPointer::New();
actor_skin->SetMapper(mapper_skin);
VTKSmart指针渲染器=
vtkSmartPointer::New();
小部件->GetRenderWindow()->添加渲染器(渲染器);
vtkRenderWindowInteractor*iren=widget->GetRenderWindow()->GetInteractor();//获取interactor
iren->Initialize();
iren->Start();
QObject::connect(滑块_1,信号(值更改(int)),显示_1,插槽(显示(int));
QObject::connect(滑块1、信号(值更改(int))、iren、插槽(修改滑块1和滑块1、轮廓骨骼和iren));
iren->重新初始化();
终端返回给我:

调用'QObject::connect(QSlider*&,const.)时没有匹配的函数 字符[19],vtkRenderWindowInteractor*&常量字符[42])”

是否有人可以帮助我将modif_1连接到vtk渲染器(iren)

提前感谢

只需使用新的和
lambda

 QObject::connect(Slider_1, &QSlider::valueChanged,
                  [&Slider_1, &iren, &contour_bone](int value)
                  {
                      modif_1(&Slider_1, &contour_bone, &iren);
                  });
void modif_1(int value, vtkSmartPointer<vtkContourFilter> m_ContourFilter, vtkRenderWindowInteractor *m_iren);

    .
    .
    .

QObject::connect(Slider_1, &QSlider::valueChanged,
                  [&iren, &contour_bone](int value)
                  {
                      modif_1(value, &contour_bone, &iren);
                  });
但是请注意,只使用
QSlider::valueChanged
信号中的值,而不是将指针传递到关联的
QSlider

 QObject::connect(Slider_1, &QSlider::valueChanged,
                  [&Slider_1, &iren, &contour_bone](int value)
                  {
                      modif_1(&Slider_1, &contour_bone, &iren);
                  });
void modif_1(int value, vtkSmartPointer<vtkContourFilter> m_ContourFilter, vtkRenderWindowInteractor *m_iren);

    .
    .
    .

QObject::connect(Slider_1, &QSlider::valueChanged,
                  [&iren, &contour_bone](int value)
                  {
                      modif_1(value, &contour_bone, &iren);
                  });
void modif_1(int值,vtkSmartPointer m_轮廓过滤器,vtkRenderWindowInteractor*m_-iren);
.
.
.
QObject::connect(滑块1和QSlider::valueChanged,
[&iren,&contour_-bone](int值)
{
modif_1(值、骨骼轮廓和iren);
});

display函数与QLCD对象一起工作,问题是关于modif_1,它使用滑块的值来修改链接到的.vtk文件iren@S.Gradit抱歉,误读了问题。已经编辑了答案。编译和连接工作非常感谢!事实上,用户通过h滑块,尽管重新初始化了渲染器,你知道吗?