Шаг 73.
Библиотека PyQt5.
Обработка сигналов и событий. Технология drag & drop. Класс QMimeData
На этом шаге мы рассмотрим назначение этого класса при организации перетаскивания.
Перемещаемые данные и сведения о MIME-типе должны быть представлены экземпляром класса QMimeData. Его следует передать в метод setMimeData() класса QDrag.
Выражение, создающее экземпляр класса QMimeData, выглядит так:
data = QtCore.QMimeData()
Класс QMimeData поддерживает следующие полезные для нас методы (полный их список приведен на странице https://doc.qt.io/qt-5/qmimedata.html):
- setText (<Текст>) - устанавливает текстовые данные (MlME-тип text/plain):
data.setText ("Перетаскиваемый текст")
- text () - возвращает текстовые данные;
- hasText () - возвращает значение True, если объект содержит текстовые данные, и False - в противном случае;
- setHtml (<HTML-текст>) - устанавливает текстовые данные в формате HTML (MlME-тип text/html):
data.setHtml ("<B>Перетаскиваемый НТLМ-текст</B>")
- html () - возвращает текстовые данные в формате HTML;
- hasHtml () - возвращает значение True, если объект содержит текстовые данные в формате HTML, и False - в противном случае;
- setUrls (<Список URI-адресов>) - устанавливает список URI-адресов (MlME-тип text/uri-list). В качестве значения указывается список с
экземплярами класса QUrl. С помощью этого MIME-типа можно обработать перетаскивание файлов. Пример:
data.setUrls ([QtCore.QUrl("http://www.google.ru/")])
- urls () - возвращает список URI-адресов:
uri = e.mimeData().urls()[0].toString()
- hasUrls () - возвращает значение True, если объект содержит список URI-адресов, и False - в противном случае;
- setImageData (<Объект изображения>) - устанавливает изображение (MIME-тип application/x-qt-image). В качестве значения можно указать, например, экземпляр
класса QImage или QPixmap. Примеры:
data.setImageData(QtGui.Qimage("pixmap.png"))
data.setImageData(QtGui.QPixmap("pixmap.png"))
- imageData () - возвращает объект изображения (тип возвращаемого объекта зависит от типа объекта, указанного в методе setImageData());
- hasImage () - возвращает значение True, если объект содержит изображение, и False - в противном случае;
- setData (<MIME-Тип>, <Данные>) - позволяет установить данные произвольного MIME-типа. В первом параметре указывается MIME-тип в
виде строки, а во втором параметре - экземпляр класса QByteArray с данными. Метод можно вызвать несколько разс различными MIME-типами. Пример передачи текстовых данных:
data.setData ("text/plain",
QtCore.QByteArray( bytes ("Данные", "utf-8") ) )
- data (<MIME-Тип>) - возвращает экземпляр класса QByteArray с данными, соответствующими указанному MIME-типу;
- hasFormat (<MIME-Тип>) - возвращает значение True, если объект содержит данные указанного MIME-типа, и False - в противном случае;
- formats () - возвращает список с поддерживаемыми объектом MIME-типами;
- removeFormat (<MIME-Тип>) - удаляет данные, соответствующие указанному MIME-типу;
- clear () - удаляет все данные.
Если необходимо перетаскивать данные какого-либо специфического типа, то нужно наследовать класс QMimeData и переопределить методы retrieveData() и formats().
За подробной информацией по этому вопросу обращайтесь к документации.
На следующем шаге мы рассмотрим обработку сброса.
Предыдущий шаг
Содержание
Следующий шаг