Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QDrag и перетаскивание из Q*View в Explorer
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
Stanislaus
Добрый день всем.

Возникла вот необходимость перетаскавать из отображения в Explorer, но с ходу как-то не все стало получаться. Примеров выгуглить не получилось, и документация как-то тускло это освещает. Если у кого-нить есть какие-нить ссылочки по этому вопросу, поделитесь пожалуйста.

Судя по Qt-документации следующее должно работать:
void SBSFilesView::mousePressEvent(QMouseEvent *event)
{
    QTableView::mousePressEvent(event);
    if (event->button() == Qt::LeftButton)
        dragStartPosition = event->pos();
}

void SBSFilesView::mouseMoveEvent(QMouseEvent *event)
{
    if (!(event->buttons() & Qt::LeftButton))
        return;

    if ((event->pos() - dragStartPosition).manhattanLength()
        < QApplication::startDragDistance())
        return;

    QDrag *drag = new QDrag(this);
    QMimeData *mimeData = new QMimeData;

    mimeData->setUrls(QList<QUrl>() << QUrl::fromLocalFile("C:\text.txt"));
    drag->setMimeData(mimeData);

    Qt::DropAction dropAction = drag->exec(Qt::MoveAction);
}


Но, в итоге получаю сообщение об ошибке: Cannot move file: cannot read from the source file or disk.
C:\text.txt 100% существует.
BRE
Экранируй '\' -> '\\'
    mimeData->setUrls(QList<QUrl>() << QUrl::fromLocalFile("C:\\text.txt"));
    drag->setMimeData(mimeData);
Stanislaus
Упс... :blush2: Спасибо большое.
Гость
Цитата(Stanislaus @ 29.7.2009, 16:29) *
Добрый день всем.

Возникла вот необходимость перетаскавать из отображения в Explorer, но с ходу как-то не все стало получаться. Примеров выгуглить не получилось, и документация как-то тускло это освещает. Если у кого-нить есть какие-нить ссылочки по этому вопросу, поделитесь пожалуйста.

Судя по Qt-документации следующее должно работать:
void SBSFilesView::mousePressEvent(QMouseEvent *event)
{
    QTableView::mousePressEvent(event);
    if (event->button() == Qt::LeftButton)
        dragStartPosition = event->pos();
}

void SBSFilesView::mouseMoveEvent(QMouseEvent *event)
{
    if (!(event->buttons() & Qt::LeftButton))
        return;

    if ((event->pos() - dragStartPosition).manhattanLength()
        < QApplication::startDragDistance())
        return;

    QDrag *drag = new QDrag(this);
    QMimeData *mimeData = new QMimeData;

    mimeData->setUrls(QList<QUrl>() << QUrl::fromLocalFile("C:\text.txt"));
    drag->setMimeData(mimeData);

    Qt::DropAction dropAction = drag->exec(Qt::MoveAction);
}


Но, в итоге получаю сообщение об ошибке: Cannot move file: cannot read from the source file or disk.
C:\text.txt 100% существует.


c:\\text.txt
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.