现在好了,现在好了,现在好了
答案 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);