Название: QFileSystemModel и сигнал о перемещении файла Отправлено: dmsovetov от Декабрь 04, 2015, 23:11 Добрый день :)
Уже второй день мучаюсь с QFileSystemModel - застрял на обработке сигналов rowsMoved/rowsAboutToBeMoved (те что описаны в QAbstractItemModel). Они почему-то не приходят. >:( Когда я в QTreeView перекидываю файлы/папки из одного места в другое, мне приходят сигналы о том, что сначала элемент был убран из модели, а потом добавлен. Мне это, к сожалению, не подходит, потому что вместе с файлами нужно перемещать автоматически еще и прикрепленную мета-информацию. Вот настройка моего наследника QTreeView Код: setModel( m_model ); QFileSystemModel стандартный. Заранее спасибо :) Название: Re: QFileSystemModel и сигнал о перемещении файла Отправлено: kambala от Декабрь 06, 2015, 16:43 так перемещение ж = копирование + удаление. или при копировании и удалении мета-информация не трогается?
а те сигналы вроде срабатывают только при перемещении строчек внутри вью. Название: Re: QFileSystemModel и сигнал о перемещении файла Отправлено: dmsovetov от Декабрь 07, 2015, 14:32 а те сигналы вроде срабатывают только при перемещении строчек внутри вью. ну вобщем-то проблема как раз в том, что я внутри вью перемещаю, а сигналов нет... по крайней мере от модели.так перемещение ж = копирование + удаление. или при копировании и удалении мета-информация не трогается? Cуть в том, что с каждым файлом ассоциирован уникальный идентификатор (12-байтный UUID) + доп. инфа, все это хранится в отдельном файле в виде JSON.Удаление через вью работает и мета-информация (это отдельный файл который я по сигналу убиваю) удаляется. Копирование из вью не предусмотрено поэтому на него пофиг :) С перемещением во вью беда: когда я в дереве вьюхи файлики по папкам двигаю, сигналы о перемещении не приходят, а вместо этого получаю сигналы об удалении и создании нового файла :( А мне ну очень надо именно перемещение, чтоб можно было сохранить UUID и переместить файл мета-информации. UPD: добавил тестовый проект в аттаче, где слот rowsRemovedSlot срабатывает, а rowsMovedSlot - нет. Название: Re: QFileSystemModel и сигнал о перемещении файла Отправлено: popper от Декабрь 08, 2015, 11:31 Судя по исходникам, QFileSystemModel испускает только сигнал
QAbstractItemModel::dataChanged. Видимо, как-то нужно на основании этой информации определять перемещение файлов внутри вьюхи Название: Re: QFileSystemModel и сигнал о перемещении файла Отправлено: Bepec от Декабрь 08, 2015, 13:04 Эти сигналы приватные для модели.
Название: Re: QFileSystemModel и сигнал о перемещении файла Отправлено: GreatSnake от Декабрь 08, 2015, 17:27 Эти сигналы приватные для модели. ???Название: Re: QFileSystemModel и сигнал о перемещении файла Отправлено: Bepec от Декабрь 08, 2015, 19:54 rowsMoved вызываются из модели и цепляются к view. По сути они испускаются когда МОДЕЛЬ перемещает строки.
Как правильно написал kambala, в данном случае у вас View совершает копирование и удаление строк из модели. На мой взгляд у вас выход при "удалении и создании" проверять наличие уида и уже постфактум определять, было ли это перемещение или удаление. PS по сути это сигнал извещающий view об изменениях в модели. Так же как и dataChanged. Как бы ещё проще отписать - это приватные технические сигналы, обеспечивающие работу model-view. Название: Re: QFileSystemModel и сигнал о перемещении файла Отправлено: dmsovetov от Декабрь 10, 2015, 11:46 По всей видимости, надо либо dropMimeData переопределять в наследнике, либо вобще свое писать. Эх, а так хотелось чтоб все само работало :(
Всем спасибо за ответы :) Название: Re: QFileSystemModel и сигнал о перемещении файла Отправлено: Bepec от Декабрь 10, 2015, 14:04 Не вижу проблемы. У вас моделька должна данные хранить в себе, а не в гипотетическом "псевдофайле". Запихайте данные в модель и будет работать само.
А так получается, что вы к механизму пристроили свой велосипед и сетуете, что ж не едет :D |