为什么Qt没有为丢失的插槽生成至少警告

Why Qt does not produce at least a warning for the missing slot?

本文关键字:插槽 警告 Qt 为什么      更新时间:2023-10-16

我花了一些时间来查找错误,与插槽和信号有关。我从另一个文件中复制了一些 connect() 行,我依靠编译器来找出我需要在新类中定义哪些对象,所以我添加了它们。"this"对象不应该被编辑,所以我不在乎提供相应的插槽。程序编译正常,即使没有警告。但是 - 在缺少插槽的情况下 - 不会运行。

考虑到(有时也是)严格的类型检查,为什么至少不产生Qt警告?(在编译时,它可以确定不存在这样的插槽。

实际上,基于函子的新连接在编译时进行检查,因此如果出现一些无效的信号/插槽,应用程序甚至不会编译

因此,要在编译时检查它,您只需要使用基于函子的连接类型:

connect(slider, &QSlider::valueChanged,
            doubleSpinBox, &QDoubleSpinBox::setValue);

而不是基于字符串:

connect(slider, SIGNAL(valueChanged(int)),
        doubleSpinBox, SLOT(setValue(int)));

您可以在此处阅读详细信息:http://doc.qt.io/qt-5/signalsandslots-syntaxes.html