Здравствуйте, гость ( Вход | Регистрация )
dmsovetov | Дата 15.12.2015, 17:02 |
Да, думаю это то, что мне нужно =) | |
lanz | Дата 15.12.2015, 16:48 |
Цитата просто надеялся, что хотя бы QFileSystemModel умеет фильтровать Попробуйте посмотреть в dropMimeData, переопределить его, разобрать то что дропнуто. Вот: https://github.com/qtproject/qtbase/blob/3b...model.cpp#L1192 Там все очень просто сделано, и понятно как перегрузить. |
|
dmsovetov | Дата 15.12.2015, 15:40 |
ОС насколько я понимаю не предоставляет сервиса слежения за перемещением файла Да, я понимаю, просто надеялся, что хотя бы QFileSystemModel умеет фильтровать когда мы в QTreeView переместили файл, а когда удалили и создали новый . |
|
lanz | Дата 11.12.2015, 11:24 |
Ну что значит велосипед. ОС насколько я понимаю не предоставляет сервиса слежения за перемещением файла: http://stackoverflow.com/questions/931093/...dification-in-c http://doc.qt.io/qt-4.8/qfilesystemwatcher.html#fileChanged https://en.wikipedia.org/wiki/Inotify https://msdn.microsoft.com/en-us/library/wi...7(v=vs.85).aspx Я не специалист по файловым системам, но то что я вижу - ни одна файловая система не поддерживает напрямую концепцию "перемещения" файла. Да и вообще сама концепция мутная. То что файл пропал из одной папки а появился в другой вовсе не значит что его туда переместили. Возможно это два несвязанных файла. Как быть например если удалился один файл а появились два одинаковых в разных местах? Дублировать метаинформацию? Для вашей задачи сопровождения метаданных я бы смотрел например https://msdn.microsoft.com/en-us/library/wi...4(v=vs.85).aspx Еще интересная ссылка: https://support.microsoft.com/en-us/kb/310316 |
|
dmsovetov | Дата 10.12.2015, 11:43 |
я не спец в Qt, но помню, что беглый поиск в гугле по этому вопросу выдавал пример реализации перегрузки методов Drag-n-drop для реализации такого функционала. Да, по всей видимости надо свой велосипед писать |
|
Алексей1153 | Дата 8.12.2015, 15:07 |
Iron Bug, я тоже находил, пробовал - чем-то меня тогда не устроило это (не вспомню, чем - скорее всего именно тем, что мувать требовалось между разными деревьями и что-то не мог срастить там). К слову, в окне, которое поверх, используется всё тот же QDrag::exec() , но работа происходит в пределах всего одного виджета (получается этакая ИЛС), при этом в самих деревьях никаких во время действия реально не производится изменений - юзер может перетащить элемент (вернее, иконку), бросить, прервать перетаскивание. "Источник" и "приёмник" элемента запоминаются, а вот о применении действия программа принимает решение уже после всего этого. | |
Iron Bug | Дата 8.12.2015, 13:59 |
я не спец в Qt, но помню, что беглый поиск в гугле по этому вопросу выдавал пример реализации перегрузки методов Drag-n-drop для реализации такого функционала. | |
Алексей1153 | Дата 8.12.2015, 11:17 |
dmsovetov, ага, мне тоже хотелось бы узнать. Но моё решение не такое уж плохое, как показала практика - весь код процесса перетаскивания и отрисовки дополнительной графики во время перетаскивания сосредоточен в одном классе - том самом окне, открываемом поверх | |
dmsovetov | Дата 8.12.2015, 11:11 |
Спасибо за ответ Я уже тоже думал всякое выдумывать: считать хеш файла и по нему искать старые мета-данные и цеплять их к "новому" файлу (который я переместил), но хотелось бы конечно узнать как это "по-нормальному" делается, наверняка есть какое-то решение. | |
Алексей1153 | Дата 8.12.2015, 9:53 |
dmsovetov, не так давно боролся с деревьями - была подобная проблема при перетаскивании (у меня три дерева рядом расположены, между всеми можно было элементы таскать). Сигналы удаления/добавления приручить так не удалось, поэтому решил задачу немного иначе - определяю попытку тащить элемент (ловлю в объекте-фильтре обработчики QEvent::MouseButtonPress, QEvent::MouseButtonRelease,QEvent::MouseMove) , создаю поверх всех деревьев прозрачное окно, где рисую текущее положение "подсвеченных" элементов и т.д. , там же определяю, куда бросили перетаскиваемое. Возможно, всё решается и более изящно, но я не смог иначе решить |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 20.4.2024, 1:17 |