в прошлый раз ещё, когда видел эту картинку, хотел сказать, что симпатишно ))
по теме: эдитор ведь знает у кого из детей фокус - в focusEvent() просто запоминай этого ребёночка в переменную, предварительно сравнив значение с новым.
пп. 1-5 легко решаются таким способом. вот если бы задача была в масштабе аппликейшена, пришлось бы строить велосипедище... )
(1) и (2) как-бы ни причем, это только описание
(3) Я делаю так "Highlight" проверяется через:
bool TPropertyEditor::focused (void) {
return hasFocus() || (CurInplace && CurInplace->focused());
}
а TPEInplace::focused() - якобы сам знает что возвращать
(4) и (5) - на самом деле идут как один пункт
Проблема в том что focusOutEvent у теряющего срабатывает раньше чем focusInEvent у получающего.
И беда происходит если не должно устанавливаться(измениться) значение в TPropertyEditor, например:
class TPEInplaceFileIn : public TPEInplaceCustomCommon
TPEInplaceCustomCommon - содержит QLineEdit и QToolButton
на потерю фокуса QLineEdit должно устанавливаться новое значение, но кроме случая нажатия QToolButton.
Поскольку focusOutEvent у QLineEdit происходит раньше получение фокуса кем-либо например QToolButton,
то я не могу определить что мне делать устанавливать или не устанавливать новое значение.
Вызов диалога по нажатию QToolButton не представляет проблемы здесь просто на нажатие кнопки делаю что-то
типа:
lockDataChange();
Dialog->exec();
unlockDataChange();
И на потерю фокуса QLineEdit проверка if(lockedDataChange()) - не устанавливаем новое значение