假设我有包含 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/

10-13 08:10