Russian Qt Forum
Ноябрь 23, 2024, 17:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: DragNDrop в Mac OS X  (Прочитано 5405 раз)
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

Но есть проблема, это работает только под виндой, под mac'ом не работает и проблема судя по этим ссылкам
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

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

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Июнь 11, 2012, 20:32 »

раз не работает через Qt, придётся лезть в Cocoa (или Carbon, смотря что используется). QApplication::macEventFilter() должен помочь.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Июнь 11, 2012, 20:58 »

раз не работает через Qt, придётся лезть в Cocoa (или Carbon, смотря что используется). QApplication::macEventFilter() должен помочь.
На какаве не знаю, а через TrackDrag делал. Ну там не очень просто получается  Улыбающийся
Записан
CyclicBarrier
Гость
« Ответ #3 : Июнь 11, 2012, 21:02 »

На какаве не знаю, а через TrackDrag делал. Ну там не очень просто получается  Улыбающийся

Выложите пожалуйста пример, как вы это сделали.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Июнь 11, 2012, 21:15 »

я сначала не обратил внимание, но тут же уже написано что надо использовать в 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.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
CyclicBarrier
Гость
« Ответ #5 : Июнь 11, 2012, 21:17 »

я сначала не обратил внимание, но тут же уже написано что надо использовать в Cocoa:

Это понятно, только с Cocoa и Obj-C я не знаком)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Июнь 11, 2012, 22:52 »

тогда остается 2 варианта: собрать Qt под карбон и ждать ответ Igors'а, или найти того, кто напишет нужный код на Objective-C/Cocoa.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Июнь 12, 2012, 00:57 »

Выложите пожалуйста пример, как вы это сделали.
Не смогу помочь, нетранспортабельно - под тысячу строк переплетенных с моими классами. Ну и Carbon - это (поза)вчерашний день, коду больше 10 лет. Прорываться в нативняке лучше с Cacao, но это тоже решение трудоемкое.

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


Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.