Qt:在 lamdas 中发出信号好还是不好的风格(并且会引起问题)

标签 qt c++11 lambda

假设我有一个包含 ButtonSpinbox 的 Widget。单击按钮时,我希望发出 Spinbox 的值。

我看到了两种可能的方法:
要么我可以创建一个私有(private)成员函数

//...
connect(m_Button, &QPushButton::clicked, this, &SomeWidget::emitSpinboxValue);
//...

SomeWidget::emitSpinboxValue() {
    emit spinboxValueChanged(m_Spinbox->value());
}

或者我可以直接在 lambda 中这样做:

//...
connect(m_Button, &QPushButton::clicked, [this]() { emit spinboxValueChanged(m_Spinbox->value()) });
//...

lambda 方式看起来更整洁(因为我不需要创建相当空的成员函数),但另一方面,在 lambda 中看到 emit 让我有一种不好的感觉。

那么,在 lambda 中发出信号是否正常(我的直觉过于敏感),或者它的风格是否糟糕(或者我什至会为将来遇到一些意想不到的麻烦做好准备)

最佳答案

没关系

emit 是一个空宏。信号是一个(工具生成的)函数,它的调用方式与任何其他函数相同。您已经捕获了 this,因此您可以从 lambda 调用任何成员,就好像您在 SomeWidget 方法中一样。

关于Qt:在 lamdas 中发出信号好还是不好的风格(并且会引起问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55966178/

相关文章:

linux - 在Qt中获取USB磁盘列表

c++ - 拥有动态对象的 std::array 是否安全?

c# - 如何在没有类型参数的情况下调用 Func?

c# - 按 lambda 表达式动态排序

c++ - 将 Qt 属性与命名空间中定义的自定义类型一起使用

qt - QML 错误表示不支持 svg

C++自动构造函数调用

C++:使用自动将类声明为函数内的变量

没有变量/参数声明的 C# lambda 表达式?

c++ - Qt5.4.1升级到5.12.1,现在QCodec报异常