Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: EhTemka от Сентября 03, 2007, 05:02



Название: Drag and Drop?
Отправлено: EhTemka от Сентября 03, 2007, 05:02


Всем привет!

   qt 4.3.1

     Тут понадобилось использовать Drag and Drop. То есть таскать файлы к примеру из проводника в своё приложение (на како-то виджет). А первый раз с этим связываюсь и ни как не могу разобраться. Как же мне получить путь к файлу который я дропнул?

в QDropEvent можно достать QMimData, но там тоже нет пути...

Очень устал. Если кто знает- помогите плизз :-[


Название: Re: Drag and Drop?
Отправлено: baka от Сентября 03, 2007, 05:38

QMimeData::urls()  -  вернет List с QUrl'ами
QUrl::path()  -  вернет строку с путем.

QList<QUrl> urList(event->mimeData()->urls());
setWindowTitle(urList.first().path());



Название: Re: Drag and Drop?
Отправлено: EhTemka от Сентября 03, 2007, 15:44
спасибо, гляну


Название: Re: Drag and Drop?
Отправлено: Amouse от Января 25, 2008, 13:34
А как решить обратную задачу?
Есть item на форме, который надо дропать в Explorer при этом создавая там файл.
(Очевидно, с item`ом связаны некие данные и создаваемый файл должен содержать эти данные (binary),
и должен иметь имя, скажем как у item`а)
?


Название: Re: Drag and Drop?
Отправлено: EhTemka от Января 29, 2008, 22:04
Для начала тебе придется всеже самому создать файл где-нибуть в темповой папке а при дропе к експлорер он просто скомируется.

примерно так:

                               
Код:
Item::mousePressEvent(QMouseEvent *event)
{
                                QString nameFile;
                                nameFile = saveData(); // твоя функция по созданию файла в темпе

                                QUrl url(nameFile) ;
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;

QList<QUrl> urls;
urls.push_back(url);

mimeData->setUrls(urls);

drag->setMimeData(mimeData);

drag->start(Qt::MoveAction);
}

Может и подругому можно я не знаю, но так должно работать

Да, и где надо (на том виджете что дропаешь) включи item->setAcceptDrops(true);