Qt: лучший способ делегировать перетаскивание детям - PullRequest
3 голосов
/ 26 августа 2011

Я использую перетаскивание в QWidget, я переопределил dragEnterEvent, dragLeaveEvent, dragMoveEvent и dropEvent, и это хорошо работает.

В моем QWidget у меня есть другие дочерние элементы QWidget, и я хочу, чтобы ониуправлять перетаскиванием тоже.Проблема в том, что мой родительский QWidget перехватывает события dnd, поэтому мои дети не получают его.Как лучше всего сказать «когда вы находитесь над дочерним виджетом, ребенок получает события dnd»?

Спасибо

Редактировать:

мои виджеты выглядят так:

----------------------------------------
|            Parent Widget             |
|       ------------------             |
|       |  Child Widget  |             |
|       |                |             |
|       ------------------             |
|                                      |
----------------------------------------

мой родительский виджет и дочерний виджет принадлежат к одному и тому же классу.

Код довольно простой, он похож на этот:

DnDWidget::DnDWidget(QWidget* parent)
    : QWidget(parent)
{
    setAcceptDrops(true);
}

void DnDWidget::dragEnterEvent (QDragEnterEvent* event )
{
    qDebug() << "dragEnterEvent";
    if (event->mimeData()->hasFormat("foo/bar"))
        event->acceptProposedAction();
}

void DnDWidget::dragMoveEvent (QDragMoveEvent* event )
{
    qDebug() << "dragMoveEvent";
    //do visual feedback stuff
}

dragEnterEventмоего ребенка никогда не зовут.

1 Ответ

2 голосов
/ 27 августа 2011

Из документации по перетаскиванию :

Чтобы иметь возможность получать мультимедийные файлы, добавленные в виджет, вызовите setAcceptDrops(true) для виджета и переопределите dragEnterEvent() и dropEvent() функции обработчика событий.

Вот краткая сводка:

  1. Дочерний объект должен вызвать setAcceptDrops (true) .
  2. Ребенок должен переопределить dragEnterEvent и принять его предлагаемое действие
  3. Ребенок должен переопределить dropEvent и принять предлагаемое действие .

Если что-либо из вышеперечисленного не соответствует действительности, тогда родитель будет иметь возможность обработать падение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...