Russian Qt Forum

Qt => Общие вопросы => Тема начата: CyclicBarrier от Июнь 11, 2012, 19:18



Название: DragNDrop в Mac OS X
Отправлено: CyclicBarrier от Июнь 11, 2012, 19:18
Нужно из приложения дропать элементы в файловую систему, под виндой это работает, сделано путём наследования от QMimeData и переопределения retrieveData(const QString&, QVariant::Type) и сохранения файлов в tmp папку, как сказано по этой ссылке http://stackoverflow.com/questions/2724252/qt-4-x-how-to-implement-drag-and-drop-onto-the-desktop-or-into-a-folder (http://stackoverflow.com/questions/2724252/qt-4-x-how-to-implement-drag-and-drop-onto-the-desktop-or-into-a-folder)

Но есть проблема, это работает только под виндой, под mac'ом не работает и проблема судя по этим ссылкам
http://stackoverflow.com/questions/5854546/how-to-implement-a-dragn-drop-from-a-qt-application-to-a-file-system-folder (http://stackoverflow.com/questions/5854546/how-to-implement-a-dragn-drop-from-a-qt-application-to-a-file-system-folder)
http://www.qtforum.org/article/34486/how-to-drag-and-drop-promised-files-from-a-mac-qt-app-to-the-mac-os-x-finder.html (http://www.qtforum.org/article/34486/how-to-drag-and-drop-promised-files-from-a-mac-qt-app-to-the-mac-os-x-finder.html)

в том, что retrieveData(const QString&, QVariant::Type) вызывается сразу, как только начался drag т.е. до финального отпускания кнопки мыши.

Вопрос, кто нибудь сталкивался с проблемой дропа из Qt приложения под Mac OS X, и как эту проблему можно решить?


Название: Re: DragNDrop в Mac OS X
Отправлено: kambala от Июнь 11, 2012, 20:32
раз не работает через Qt, придётся лезть в Cocoa (или Carbon, смотря что используется). QApplication::macEventFilter() должен помочь.


Название: Re: DragNDrop в Mac OS X
Отправлено: Igors от Июнь 11, 2012, 20:58
раз не работает через Qt, придётся лезть в Cocoa (или Carbon, смотря что используется). QApplication::macEventFilter() должен помочь.
На какаве не знаю, а через TrackDrag делал. Ну там не очень просто получается  :)


Название: Re: DragNDrop в Mac OS X
Отправлено: CyclicBarrier от Июнь 11, 2012, 21:02
На какаве не знаю, а через TrackDrag делал. Ну там не очень просто получается  :)

Выложите пожалуйста пример, как вы это сделали.


Название: Re: DragNDrop в Mac OS X
Отправлено: kambala от Июнь 11, 2012, 21:15
http://www.qtforum.org/article/34486/how-to-drag-and-drop-promised-files-from-a-mac-qt-app-to-the-mac-os-x-finder.html (http://www.qtforum.org/article/34486/how-to-drag-and-drop-promised-files-from-a-mac-qt-app-to-the-mac-os-x-finder.html)
я сначала не обратил внимание, но тут же уже написано что надо использовать в Cocoa:
Цитировать
In our current Cocoa application we are using the traditional concept of "Promised Files", which have to be delivered ONLY (!) in the case of a final dropping action in the finder (not on start of the drag):

- (NSArray *)namesOfPromisedFilesDroppedAtDestination (NSURL *)dropDestination

called once from

- [NSView dragPromisedFilesOfTypes:[NSArray arrayWithObject:@""] …

when finally dropping in the finder.


Название: Re: DragNDrop в Mac OS X
Отправлено: CyclicBarrier от Июнь 11, 2012, 21:17
я сначала не обратил внимание, но тут же уже написано что надо использовать в Cocoa:

Это понятно, только с Cocoa и Obj-C я не знаком)


Название: Re: DragNDrop в Mac OS X
Отправлено: kambala от Июнь 11, 2012, 22:52
тогда остается 2 варианта: собрать Qt под карбон и ждать ответ Igors'а, или найти того, кто напишет нужный код на Objective-C/Cocoa.


Название: Re: DragNDrop в Mac OS X
Отправлено: Igors от Июнь 12, 2012, 00:57
Выложите пожалуйста пример, как вы это сделали.
Не смогу помочь, нетранспортабельно - под тысячу строк переплетенных с моими классами. Ну и Carbon - это (поза)вчерашний день, коду больше 10 лет. Прорываться в нативняке лучше с Cacao, но это тоже решение трудоемкое.

Выложите минимальный проект, подумаем. Если Finder разрешает аccept. то AppleEvent прийти должен, может удастся решить в Qt