When starting to edit a property item then e.g. the method PropertyFloatConstraintItem::createEditor is called where the receiver is the slot PropertyItemDelegate::valueChanged. This slot is connected to the appropriate signal of the widget, e.g. valudChanged of a spin box.
When the user changes the value in the spin box then Qt emits the valueChanged signal and thus directly invokes PropertyItemDelegate::valueChanged. This function then invokes the commitData signal of the QAbstractItemDelegate class which invokes the virtual method commitData of PropertyEditor that is a sub-class of QAbstractItemView.
Over some more steps this calls PropertyItem::setPropertyValue that sets the property of the view provider or document object.
The relevant stack trace is:
Code: Select all
1 PartGui::ViewProviderPartExt::onChanged ViewProviderExt.cpp
2 App::Property::hasSetValue Property.cpp
3 App::PropertyFloatConstraint::setPyObject PropertyStandard.cpp
4 App::PropertyContainerPy::setCustomAttributes PropertyContainerPyImp.cpp
5 App::PropertyContainerPy::_setattr PropertyContainerPy.cpp
6 App::ExtensionContainerPy::_setattr ExtensionContainerPy.cpp
7 Gui::ViewProviderPy::_setattr ViewProviderPy.cpp
8 Gui::ViewProviderDocumentObjectPy::_setattr ViewProviderDocumentObjectPy.cpp
9 Base::PyObjectBase::__setattro PyObjectBase.cpp
10 PyObject_SetAttr object.c
11 PyEval_EvalFrameEx ceval.c
12 PyEval_EvalCodeEx ceval.c
13 PyEval_EvalCode ceval.c
14 run_mod pythonrun.c
15 PyRun_StringFlags pythonrun.c
16 Base::InterpreterSingleton::runString Interpreter.cpp
17 Gui::Command::runCommand Command.cpp
18 Gui::PropertyEditor::PropertyItem::setPropertyValue PropertyItem.cpp
19 Gui::PropertyEditor::PropertyFloatConstraintItem::setValue PropertyItem.cpp
20 Gui::PropertyEditor::PropertyItem::setData PropertyItem.cpp
21 Gui::PropertyEditor::PropertyModel::setData PropertyModel.cpp
22 Gui::PropertyEditor::PropertyItemDelegate::setModelData PropertyItemDelegate.cpp
23 QAbstractItemView::commitData qabstractitemview.cpp
24 Gui::PropertyEditor::PropertyEditor::commitData PropertyEditor.cpp
25 QAbstractItemView::qt_static_metacall moc_qabstractitemview.cpp
26 QMetaObject::activate qobject.cpp
27 QMetaObject::activate qobject.cpp
28 QAbstractItemDelegate::commitData moc_qabstractitemdelegate.cpp
29 Gui::PropertyEditor::PropertyItemDelegate::valueChanged PropertyItemDelegate.cpp
30 Gui::PropertyEditor::PropertyItemDelegate::qt_static_metacall moc_PropertyItemDelegate.cpp
31 QMetaObject::activate qobject.cpp
32 QMetaObject::activate qobject.cpp
33 QDoubleSpinBox::valueChanged moc_qspinbox.cpp
But again, it's not up to the property editor to delay the emission of the signals, it's up to the view provider or document object class to handle this accordingly.