Here are the results of analysis.
First, as it may be confusing from QAbstractSpinBox documentation, this class implements the meta 'keyboardTracking' flag, but neither its logic nor the mentioned 'textChanged' and 'valueChanged' signals. It's up to subclasses to implement it.
Remark : AFAIK TechDraw is a C++ WB, following statements focus on C++. Typically QuantitySpinBox specific API isn't available in Python.
Regarding QuantitySpinBox :
'textChanged' isn't implemented, nothing more about it.
'valueChanged' is implemented. Notice 'keyboardTracking' behavior isn't implemented so setting/clearing it won't change anything.
'valueChanged' signal is emitted as soon as the value is changed
to a correct value.
It means that is you're writing "2 kg", it will be emitted after '2', after space,
not after the 'k', and finally after the 'g'. Of course if you enter "2 mm", it will be emitted for all characters as the first 'm' will be valid as 'meter'.
As soon as the entered text can't be determined as being a correct quantity, signal is no more emitted.
I think it's quite close from what you want and should be acceptable. Notice 'valueChanged' exists in 2 flavors : 'valueChanged(double)' emits raw value (unitless) and 'valueChanged(Base::Quantity') emits the complete quantity. Both are always emitted at the same time.
If you want to really catch all changes, you can connect to the inner QLineEdit of the spinbox by connecting to '
spinbox_pointer->lineEdit()->textChanged()'. This will give you access to lower level entered text. You may then have to call QuantitySpinBox methods to check/clear the text, such as 'validate()' or 'valueFromText()'.
Notice 'lineEdit()' is a QAbstractSpinBox method, so this would work on any spinbox type inherited from it.
HTH