Шаг 72.
Библиотека PyQt5.
Обработка сигналов и событий. Технология drag & drop. Запуск перетаскивания

    На этом шаге мы рассмотрим алгоритм реализации перетаскивания, а также классы и методы, его поддерживающие.

    Операция перетаскивания состоит из двух частей: первая часть запускает процесс, а вторая обрабатывает момент сброса объекта. Обе части могут обрабатываться, как одним, так и двумя разными приложениями. Запуск перетаскивания осуществляется следующим образом:

  1. Внутри метода mousePressEvent() запоминаются координаты указателя мыши в момент щелчка ее левой кнопкой.
  2. Внутри метода mouseMoveEvent() вычисляется пройденное расстояние или измеряется время операции. Это необходимо для того, чтобы предотвратить случайное перетаскивание. Управлять задержкой позволяют следующие статические методы класса QApplication:
    • setStartDragDistance (<Дистанция>) - задает минимальное расстояние, после прохождения которого будет запущена операция перетаскивания;
    • startDragDistance () - возвращает это расстояние;
    • setStartDragTime (<Время>) - задает время задержки в миллисекундах перед запуском операции перетаскивания;
    • startDragTime () - возвращает это время.
  3. Если пройдено минимальное расстояние или истек минимальный промежуток времени, создается экземпляр класса QDrag, и у него вызывается метод ехес(), который после завершения операции возвращает действие, выполненное с данными (например, их копирование или перемещение).

    Создать экземпляр класса QDrag можно так:

  <Объект> = QtGui.QDrag (<Ссылка на компонент>)

    Класс QDrag поддерживает следующие методы:

    Класс QDrag поддерживает два сигнала:

    Пример назначения обработчиков сигналов:

  drag.actionChanged.connect (self.on_action_changed) 
  drag.targetChanged.connect (self.on_target_changed)

    На следующем шаге мы рассмотрим класс QMimeData.




Предыдущий шаг Содержание Следующий шаг