带有VTK的插槽连接信号(C ++)

时间:2016-05-10 11:58:12

标签: vtk

现在好了,现在好了,现在好了

3 个答案:

答案 0 :(得分:2)

你刚回答了自己的问题。您的插槽需要一个无法从信号类型转换的参数类型。

class Foo
    ...
    void mySlot(QPoint p);
    void mySlot2(int i);
    void mySlot3();
    void mySlot4(QVariant v);
    void mySlot5(QVariant v, int i);

... //elsewhere
class Bar
    ...
    void mySignal(int);
...
//And the connections:
Foo foo;
Bar bar;
connect(&bar, SIGNAL(mySignal(int)), &foo, SLOT(mySlot(QPoint))); //won't work
connect(&bar, SIGNAL(mySignal(int)), &foo, SLOT(mySlot2(int))); //works; matching argument types
connect(&bar, SIGNAL(mySignal(int)), &foo, SLOT(mySlot3())); //works; drops the int argument
connect(&bar, SIGNAL(mySignal(int)), &foo, SLOT(mySlot4(QVariant))); //works; implicit conversion
connect(&bar, SIGNAL(mySignal(int)), &foo, SLOT(mySlot5(QVariant, int))); //nope; more expected arguments than the signal provides

编辑: 您的代码符合上述期望。您连接的插槽需要多个参数,而信号则不提供任何参数。

答案 1 :(得分:1)

如果您希望对信号槽连接进行编译时检查,可以使用此处描述的新语法:New Signal-Slot-Syntax in Qt5

您的代码中使用的旧版本基于字符串比较(这是宏 SIGNAL SLOT 正在执行的操作)。新语法基于函数指针。如果参数不合适,则会出现编译时错误,代码的整体性能应该更好。

答案 2 :(得分:0)

正如Jon Harper指出的那样,你的信号和插槽之间的参数不匹配。

您的信号应如下所示

 void sigPointIsPicked(vtkObject *, unsigned long, void *, void *, vtkCommand *);

你应该像这样发射:

 emit sigPointIsPicked(vtkObj_ptr, ulong_value, void_ptr_one, void_ptr_two, vtkCmd_ptr);