Название: Поймать изменение Q(tree/table/list)Widget при редактировании. Отправлено: Bepec от Декабрь 28, 2015, 12:01 Суть желания - имеется модель, в которой нужно изменять данные. При этом после изменения необходимо производить некие действия, в результате которых либо откатывать изменения, либо оставлять изменения.
Пример - имитируем содержимое каталога, мы переименовываем файл "1.exe" в "2.exe". После чего нам необходимо выполнить переименование на диске и сделать вид актуальным (может ошибка переименовая, мб недопустимые символы и так далее). На данным момент закавыка в том, что я не нахожу вариантов как получить значения "1.exe" и "2.exe" в момент изменения. Сейчас сделано так, что при начале редактирования мы получаем указатель на итем (и соответственно значение "1.exe"), а при окончании редактирования из делегата испускает сигнал с данными "2.exe". Т.к. функции делегата константные, сигнал испускается через прокси виджет. PS оно работает, живёт и даже шевелится, но хотелось бы более изящного и менее извращённого решения, которое я мог не заметить :D Название: Re: Поймать изменение Q(tree/table/list)Widget при редактировании. Отправлено: Igors от Декабрь 28, 2015, 13:39 Хранить полное имя файла ну хотя бы в UserRole. Тогда все данные имеются в слоте itemChanged
Название: Re: Поймать изменение Q(tree/table/list)Widget при редактировании. Отправлено: __Heaven__ от Декабрь 28, 2015, 14:31 Верес, а вы не хотите попробовать перейти на Q(tree/table/list)View?
У меня таким образом много проблем исчезло. setData будет пытаться переименовать ваш файл, а data будет читать актуальный Название: Re: Поймать изменение Q(tree/table/list)Widget при редактировании. Отправлено: Bepec от Декабрь 28, 2015, 14:45 Собственно я не хочу на них переходить, ибо появляется сотня лишняя других проблем, особенно в древовидной структуре.
Я использую QTreeWidget зачастую из-за простоты. Переход на View принесёт необходимость в создании модели. ммм... Счас даже лучше поясню: Мне нужна не модель, которая осуществляет изменения автоматически и показывает всю информацию (аналог View с FileModel), а модель отображающая данные, которые контролирую я. Т.е. используя TreeWidget я отбрасываю проблемы модели и View, я просто вставляю туда итемы для отображения. Взаимодействие же происходит в коде, который не зависит от view/модели и позволяет творить абсолютно всё, не имея ограничения модели. По сути я беру QDir + QTreeWidget и получаю тот же результат, что и View+FileModel, но имею бОльшие возможности фильтрации, контроля, виртуализации. Чтобы добавить допустим ссылку, не имеющуюся на диске, мне необходимо всего лишь добавить итем и изменить процедуру обработки. В то время как в модели я не могу этого сделать, мне придётся написать универсальный механизм добавления ссылок, обработку их удаления/изменения/переноса,т.е. переписать все встроенные механизмы. По сути я строю велосипеды, как выразился бы Igors. И эти велосипеды без переключения скоростей, динамо машины во втулке и прочих излишеств. PS я с легкостью поменяю своё мнение, если вы мне откроете глаза на плюсы модели в таких простых задачах. PPS я понимаю необходимость моделей для работы с большим количеством данных и стандартными операциями, но в простых задачах они мне кажутся излишними. Название: Re: Поймать изменение Q(tree/table/list)Widget при редактировании. Отправлено: Bepec от Декабрь 28, 2015, 14:46 Отдельный пост для благодарности Igors - проглядел я этот метод. Точнее неверно понимал его значение. Спасибо.
Название: Re: Поймать изменение Q(tree/table/list)Widget при редактировании. Отправлено: __Heaven__ от Декабрь 28, 2015, 15:59 На начальном этапе дерево достаточно сложно реализуется, зато потом достаточно просто расширяется.
На самом деле, большого опыта работы с виджетом не имею (да и с моделью тоже :D), поэтому убедить вряд ли смогу. Но в моей задаче оказалось выгоднее использовать модель. Например, динамическая смена языка, имхо проще. Название: Re: Поймать изменение Q(tree/table/list)Widget при редактировании. Отправлено: Bepec от Декабрь 29, 2015, 05:52 Она как раз проще для дальнейшей разработки, когда нужно поддерживать и развивать продукт. У меня несколько иная ситуация аля "приёмка" и гуляй вася.
|