QSpinBox 和 QDoubleSpinBox 不调用 value Changed 的方法

QSpinBox and QDoubleSpinBox do not call method on valueChanged

本文关键字:Changed 方法 value 调用 QDoubleSpinBox QSpinBox      更新时间:2023-10-16

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

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

.cpp

connect(uiSpinBox, SIGNAL(valueChanged()), this, SLOT(slotInputChanged));
connect(uiDoubleSpinBox, SIGNAL(valueChanged()), this, SLOT(slotInputChanged));
void ColorSwatchEdit::slotInputChanged()
{
qDebug() << "Im here";
}

页眉

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)

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