Я использую библиотеку Qt Property Browser в качестве редактора записей.Когда пользователь завершит редактирование какого-либо данного поля, удалив фокус с элемента редактирования или нажав клавишу ввода, я хочу получить информацию об этом, чтобы я мог принять изменение, обработать его и отправить в РЕАЛЬНОЕизменяемый элемент.
К сожалению, мне кажется, что я могу только найти сигналы propertyChanged и valueChanged, и они срабатывают каждый раз, когда любое количество текста добавляется или удаляется, а не только когда пользователь запускает финиш.
Не имея возможности получить это уведомление, я не понимаю, как это может быть полезным компонентом.Он даже не возвращается, когда пользователь нажимает [ESC], что я, безусловно, должен иметь возможность реализовать!Конечно, я ошибаюсь, что абсолютно НЕТ сигнала, который делает то, что мне нужно, но я точно не могу его найти.
Кто-нибудь знает?
После изучения исходного кода,люди, которые создали фабрику линейных редакторов, приняли неудачное решение соединиться с textEdited, а не редактировать Finish.Изменить это было бы относительно просто, за исключением того, что из-за методического подхода невозможно расширить эту фабрику редакторов, которая имеет расширяемый интерфейс!
ВСЕ, что мне нужно сделать, это переопределить функцию createEditor, отключить плохое соединение, подключить лучшее соединение с промежуточным вызовом, чтобы вывести строку из элемента управления редактирования строки.Но нет!!!Мы не позволим вам сделать это!Мы собираемся поместить все бухгалтерские материалы в закрытый класс, к которому вы не можете получить доступ или позвонить, и те части, которые мы собираемся позволить вам позвонить, будут тесно связаны с тем фактом, что их вызываютредактировать контроль, а не что-нибудь еще.ЭРГО, мы довольно эффективно сделали жизнь настолько разочаровывающей, насколько мы могли себе представить.Разве мы не блестящие?
Я узнал больше.Стандартный подход Qt для таких объектов использует делегаты для управления поведением, которое я пытаюсь получить.Библиотека свойств Qt переопределяет это поведение и делает что-то еще, что НЕ то, что я пытаюсь выполнить.Внутри интерфейса QAbstractItemDelegate находится функция setModelData, которая вызывается представлением, к которому она присоединена, когда пользователь фиксирует свои изменения;он не вызывается, когда они уничтожают редактор без фиксации.
Следующим трюком будет изучение архитектуры Qt Model / View и исправление библиотеки, чтобы сделать это правильно.Это может даже составить не более чем простое удаление основных заглушек, которые разрушают поведение, которое я пытаюсь получить.Возможно также, что отказ от использования этой системы вместо простого использования QtTreeView может быть лучшим выбором, хотя было бы неплохо сохранить возможность переключения между различными типами браузеров.