Что именно изменилось, когда QStandardItemModel itemChanged сигнализируется - PullRequest
4 голосов
/ 27 августа 2009

В QStandardItemModel есть сигнал, который генерируется при изменении данных элемента. Обычно мы подключаем обработчик для этого сигнала и выполняем всю работу в подпрограмме обработчика.

Такая процедура дескриптора получает только указатель на элемент. С помощью этого указателя можно получить доступ к данным элемента. Тем не менее, мы не знаем, что именно изменилось ... мы только обновили значение.

Если данные элемента имеют несколько ролей, я хочу иметь возможность точно определить, какая роль (данные) была изменена и какое предыдущее значение.

Ответы [ 2 ]

5 голосов
/ 27 августа 2009

В общем, QStandardItemModel для очень простого моделирования данных. Если вы хотите перейти к более сложным вещам, как вы описали, вы должны изучить подкласс QAbstractItemModel или одно из его абстрактных производных: Классы Model / View

Это может показаться большой работой, но используйте примеры и справочные руководства: Программирование модели / вида , Подклассы модели и вознаграждение будет отличным.

0 голосов
/ 27 августа 2009

Это невозможно со стандартными сигналами Qt. Я предлагаю добавить еще один сигнал для этого.

Для моих собственных моделей я обычно использую такой подход: у меня есть корневой экземпляр, который содержит указатели на все части моей модели данных. Элементы в моей модели используют этот корневой экземпляр для отправки сигналов типа

itemChanged(item, attribute, oldValue, newValue)

для простых свойств. То же самое касается списков и тому подобного; только здесь у меня есть несколько сигналов в зависимости от действия, например:

itemAdded(list, item, index)

[EDIT] Обработка сигналов QT очень проста. Как правило, он только скажет «что-то изменилось». Нет поддержки "что именно изменилось?" так как вам это не нужно большую часть времени. Поэтому, если вам нужна эта информация, вы должны сделать это самостоятельно. Вы не можете использовать одну роль, потому что роли должны быть подкреплены чем-то в вашем предмете. Что вы можете сделать, это добавить информацию об изменениях в ваши элементы и прочитать ее, когда роль запрашивается. Но это не то, что поддерживается "из коробки".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...