Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2013, 20:50   #1
Lasor
Пользователь
 
Регистрация: 05.12.2012
Сообщений: 67
По умолчанию Drag and drop в QMdiArea

Доброго времени суток.
Столкнулся с любопытной проблемой при реализации перетаскивания:
Есть QTableWidget. Соответственно, на нём простая таблица с текстом. Ставлю флаг setDragEnabled(true) и получаю возможность вытаскивать элемент. Всё прекрасно. Таблица лежит на виджете. Сам этот виджет расположен в QMdiArea как SubWindow (не наследуется от него, а добавляется в QMdiArea методом addSubWindow). И весёлость заключается в том, что выставив у QMdiArea setAcceptDrops(true) получаю ровным счётом ничего... На указателе с перетаскиваемым объектом знак "нельзя" (перечёркнутый кружок).
Может кто сталкивался с подобным? Или у меня где-то ошибка?
З.Ы. dragEnterEvent работает, в метод входит. Но мне нужно отлавливать отпускание мыши в событии dropEvent. Вот в него не заходит.
Lasor вне форума Ответить с цитированием
Старый 25.02.2013, 16:14   #2
Lasor
Пользователь
 
Регистрация: 05.12.2012
Сообщений: 67
По умолчанию

Вообщем, с проблемой разобрался. Надо было:
#include <QDragEnterEvent>
#include <QDropEvent>
Теперь встал очередной вопрос: как выдернуть QMimeData из QDropEvent?
Lasor вне форума Ответить с цитированием
Старый 25.02.2013, 18:37   #3
Lasor
Пользователь
 
Регистрация: 05.12.2012
Сообщений: 67
По умолчанию

И этот вопрос я решил успешно:
Надо переопределить метод mimeData в QTableWidget следующим образом:
Код:
QMimeData* DataTable::mimeData(const QList<QTableWidgetItem *> items) const
{
    QMimeData *mimeData = new QMimeData();
    mimeData->setText(this->currentItem()->text());
    return mimeData;
}
То есть, я выставил просто текст из ячейки.
А, далее, просто ловим его в другом виджете:
Код:
void RdMdiArea::dropEvent(QDropEvent* event)
{
    QString droppedPacketName = event->mimeData()->text();
    SinglePacketInspectWindow* sppiw = new SinglePacketInspectWindow;
    sppiw->setWindowTitle(droppedPacketName);
    this->addSubWindow(sppiw);
    sppiw->show();
}
Вот так вот.
Lasor вне форума Ответить с цитированием
Старый 04.03.2013, 13:39   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

прикольно, не видел метод mimeData. Я при драгЕвенте засовывал в mime указатель на перестаскиваемый элемент, при дропе юзал dynamic_cast вроде бы. А может быть путаю, но mimeData() точно не использовал.
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drag And Drop Adyvan C# (си шарп) 0 04.03.2012 06:27
drag and drop kelty Помощь студентам 0 11.09.2009 23:00
Drag and Drop nusik Общие вопросы C/C++ 2 09.07.2009 11:09
Нужна помощь (Drag-And-Drop & Drag-Abd-Dock)) Arkuz Общие вопросы Delphi 1 18.04.2009 00:15
Drag and Drop Xardas Общие вопросы Delphi 8 20.01.2008 23:09