QSpinBox 和 QDoubleSpinBox 不在 valueChanged 上调用方法

QSpinBox and QDoubleSpinBox do not call method on valueChanged

我只想在 qspinbox 和 doublespinbox 的值发生变化时调用一个方法。

我不需要更改旋转框的实际值,我只希望它触发另一个方法的调用。为什么下面的代码没有错误或根本不做任何事情?连方法都不调用?

cpp

connect(uiSpinBox, SIGNAL(valueChanged()), this, SLOT(slotInputChanged));
connect(uiDoubleSpinBox, SIGNAL(valueChanged()), this, SLOT(slotInputChanged));

void ColorSwatchEdit::slotInputChanged()
{
    qDebug() << "Im here";
}

header

public:
    QSpinBox *uiSpinBox;
    QDoubleSpinBox *uiDoubleSpinBox;

public slots:
    void slotInputChanged();

即使您不使用携带信号的数据,您也必须在连接中建立签名:

connect(uiSpinBox, SIGNAL(valueChanged(int)), this, SLOT(slotInputChanged)); 
connect(uiDoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(slotInputChanged));

但建议您使用新的连接语法,因为它会指示错误:

connect(uiSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this, &ColorSwatchEdit::slotInputChanged); 
connect(uiDoubleSpinBox, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &ColorSwatchEdit::slotInputChanged);

除了 eyllanesc 的 答案之外,如果可能,请考虑使用 FunctionPointer 语法,即

connect(uiSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this, &YourClass::slotInputChanged)

connect(uiDoubleSpinBox, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &YourClass::slotInputChanged)

这样编译器可以在编译时告诉你连接是否无法解析