QObject::connect: Incompatible sender/receiver arguments
Bar::bar(signed short*) --> Foo::foo(short int*)
有没有办法让QT在这类事情上更聪明,还是我应该使用编码标准来避免这种奇怪的事情?
编辑:上述错误消息是来自失败的connect()
调用的运行时错误消息。
答案 0 :(得分:5)
有两种语法可以建立信号和插槽连接:
旧:
connect(sender, SIGNAL(valueChanged(int)), receiver, SLOT(updateValue(int)));
新:
connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue);
旧语法使用SIGNAL
和SLOT
宏。说到这种语法,Qt的元编译器很笨 - 它依赖于字符串解析。如果字符串不匹配,则不连接。在我的系统上(具有32位int
),我无法将someFunc(int)
连接到anotherFunc(int32_t)
。更糟糕的是,如果没有使用someFunc(int32_t)
和anotherFunc(int32_t)
注册该类型,我就无法将Q_DECLARE_METATYPE
与qRegisterMetaType<T>()
相关联。有趣!
您应该始终使用新语法。它使用成员函数指针和编译时检查的好处
优点:
我相信新语法可以解决您的问题。
答案 1 :(得分:3)
如果你想要,你可以通过报告这个MOC类型检查中的错误来使一些Qt开发人员痛苦,他们用来检查信号/插槽参数匹配。
但更严重的是:不要这样做!始终命名相同的类型。只需使用short *
。
其他任何事情对其他孩子都不好。