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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Drag&Drop  (Прочитано 2501 раз)
Kn1fe
Гость
« : Сентябрь 07, 2017, 18:12 »

Вообщем есть класс, унаследованный от QTableWidget и у него переопределены функции drag&drop.
Код:
void ArchiveQTableWidget::dragEnterEvent(QDragEnterEvent *event)
{
    if (event->mimeData()->hasUrls()) {
        event->acceptProposedAction();
    }
}

void ArchiveQTableWidget::dragMoveEvent(QDragMoveEvent *event)
{
    event->acceptProposedAction();
}

void ArchiveQTableWidget::dragLeaveEvent(QDragLeaveEvent *event)
{
    event->accept();
}

void ArchiveQTableWidget::dropEvent(QDropEvent *event)
{
    foreach (const QUrl &url, event->mimeData()->urls()) {
        QString fileName = url.toLocalFile();
        qDebug() << "Dropped file:" << fileName;
    }
}

void ArchiveQTableWidget::startDrag(Qt::DropActions supportedActions)
{
    qDebug() << supportedActions;
    QFileInfo fi("1");
    QUrl url = QUrl::fromLocalFile(fi.absoluteFilePath());
    qDebug() << fi.absoluteFilePath();
    QMimeData *mimeData = new QMimeData;
    mimeData->setData("application/octet-stream", QByteArray("raq"));
    mimeData->setUrls(QList<QUrl>() << url);
    QDrag *drag = new QDrag(this);
    drag->setMimeData(mimeData);
    drag->exec(Qt::MoveAction);
}

Перетаскивание файлов и папок на программу работает прекрасно, а вот обратно никак не получается перенести. Натолкните на правильный путь.
Записан
Kn1fe
Гость
« Ответ #1 : Сентябрь 09, 2017, 01:19 »

Неужели вообще никто с Drag&Drop файлов не работал? Нашел способ вытащить 1 файл, мб кто знает как заставить его создать больше? пробовал засунуть в цикл for, зависает при вызове второго drag->exec
Код:
QDrag *drag = new QDrag(this);
        QString filename = "1.txt";
        QMimeData* mimeData = new QMimeData;
        FILEGROUPDESCRIPTOR desc;
        desc.cItems = 1;
        desc.fgd[0].dwFlags = FD_PROGRESSUI;
        wcscpy(desc.fgd[0].cFileName, filename.toStdWString().c_str());
        mimeData->setData("FileGroupDescriptor", QByteArray((const char*)&desc, sizeof(FILEGROUPDESCRIPTOR)));
        mimeData->setData("FileContents", QByteArray("whatadjsaofhniewfnj"));
        drag->setMimeData(mimeData);
        qDebug() << drag->exec(supportedActions);
Записан
Bepec
Гость
« Ответ #2 : Сентябрь 09, 2017, 02:18 »

Возьмите дроп, перелейте данные в drag, посмотрите результат. Получилось? Прочитайте данные, сверьте поля, найдите свою ошибку. Пользуйтесь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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