c++ - 为什么 Qt 至少不对丢失的插槽发出警告?

标签 c++ qt

我花了一些时间来查找与插槽和信号有关的错误。我从另一个文件复制了一些 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

关于c++ - 为什么 Qt 至少不对丢失的插槽发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35819029/

相关文章:

c++ - Sapera++ API 与 Qt undefined reference '_imp__ZN11SapLocation

c++ - QTreeView 在双击时编辑 UserRole 而不是 DisplayRole

c++ - 如何在基于 GStreamer 的 Qt 中实现视频小部件?

c++ - MVP 矩阵在着色器之外不工作?

c++ - 为什么不使用 `make_x()` 函数尽可能省略 move 构造函数?

c++ - 对 QJsonArray 进行排序

qt - 显示必填字段

c++ "no matching function error"返回二维数组

c++ - erase-remove 习语 : did I just delete something?

c++ - 在来自 necessitas 的 qt 中显示当前窗口