Перетащите с .ui файлы - PullRequest
       25

Перетащите с .ui файлы

0 голосов
/ 13 ноября 2009

У меня большие проблемы с перетаскиванием. Я создал новый класс форм Qt Designer, в котором у меня есть один QListWidget и один QWidget. Теперь я хочу включить перетаскивание между этими двумя виджетами.

Проблема в том, где можно добавить функции dragEnterEven (...), dragMoveEvent (...) и т. Д.? У меня есть только эти файлы class.h, class.cpp и class.ui.

Любая помощь очень ценится!

-Samuli

Ответы [ 2 ]

3 голосов
/ 13 ноября 2009

Прежде всего, если вы не читали документацию Qt Drag and Drop , которую вы действительно хотите начать там. То, что я собираюсь рассказать вам, это краткое изложение того, что там. Вы также должны обязательно посмотреть примеры перетаскивания , как только прочитаете описание процесса.

Во-вторых, и я прошу прощения, если я неправильно понял, ваш вопрос звучит так, как будто вы не совсем знакомы с C ++. Вы хотите объявить методы в файле .h и определить их в файле .cpp. Вы можете использовать Дизайнер, чтобы сделать некоторые из этих объявлений событий, но вам нужно будет определить реализацию этих событий в .cpp. Если это не ясно, вам нужно будет сначала прочитать больше о базовом C ++.

Если вы знакомы с этими основами, вот краткое описание того, как работает перетаскивание:

  • Перетаскивание выполняется:
    • Создание QDrag. Вы хотите сделать это в случае, если вызовет перетаскивание, во всех случаях я могу вспомнить щелчок мыши (mousePressEvent или mouseMoveEvent - что зависит от того, какое именно поведение вы хотите видеть).
    • Кодирование данных, которые вы хотите перетащить. Вы делаете это, используя MIME-кодирование, стандартный способ пометить, какой тип документа перетаскивается. (Примеры включают текст, изображения и большинство других форматов мультимедиа). Предположим, текст для простого случая.
      • Создать QMimeData
      • Установить данные для соответствующего типа (например, для использования текста QMimeData::setText) \
      • Добавьте данные mime к объекту перетаскивания с помощью QDrag::setMimeData.
      • Позвоните QDrag::exec на объект перетаскивания.
  • Удаление выполняется:
    • Включение свойства acceptDrops для данного виджета с использованием QWidget::setAcceptDrops(true).
    • Определите dropEvent в вашем виджете для обработки падения. Данные, которые вы устанавливаете при перетаскивании с помощью setMimeData, доступны как метод события перетаскивания QDropEvent::mimeData. Вам необходимо извлечь из него данные, используя соответствующий тип документа (например, text()).

Очевидно, что это не завершено, но перетаскивание имеет достаточно шагов, которые вы действительно должны прочитать о них подробно один раз и посмотреть на некоторые примеры. Это резюме предназначено, чтобы дать вам представление о том, что вам нужно делать.

0 голосов
/ 14 ноября 2009

Самый простой способ - создать подклассы QListWidget и QWidget, между которыми вы хотите перетаскивать объекты, и обрабатывать события в этих реализациях. Если вы сделаете это, вы сможете щелкнуть правой кнопкой мыши в конструкторе и продвигать виджеты в вашем основном файле .ui.

Если вы не хотите создавать подклассы, вы можете посмотреть фильтры событий и установить фильтр событий для каждого из этих виджетов. Фильтр событий может затем обработать события, которые вызывают вызовы dragEnterEvent() и dragMoveEvent(). Это, вероятно, будет более запутанным для любого, кто будет смотреть на ваш код позже.

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

...