Предоставление перетаскивания очень интуитивно понятно для пользователя. Он встречается во многих настольных приложениях, где пользователь может копировать или перемещать объекты из одного окна в другое.
Перетаскивание данных на основе MIME основано на классе QDrag. Объекты QMimeData связывают данные с соответствующим им типом MIME. Он сохраняется в буфере обмена, а затем используется в процессе перетаскивания.
Следующие функции класса QMimeData позволяют легко определять тип MIME и использовать его.
тестер | добытчик | Сеттер | MIME Типы |
---|---|---|---|
hasText () | текст() | SetText () | текст / обычный |
hasHtml () | HTML () | setHtml () | текст / html |
hasUrls () | URL () | setUrls () | текст / Ури список |
hasImage () | ImageData () | setImageData () | изображение / * |
hasColor () | colorData () | setColorData () | применение / х цветов |
Многие объекты QWidget поддерживают перетаскивание. Те, которые позволяют перетаскивать их данные, имеют setDragEnabled (), который должен быть установлен в true. С другой стороны, виджеты должны реагировать на события перетаскивания, чтобы сохранить перетаскиваемые в них данные.
-
DragEnterEvent предоставляет событие, которое отправляется целевому виджету при поступлении в него действия перетаскивания.
-
DragMoveEvent используется, когда выполняется действие перетаскивания.
-
DragLeaveEvent генерируется, когда действие перетаскивания покидает виджет.
-
DropEvent , с другой стороны, происходит, когда удаление завершено. Предлагаемое мероприятие действие может быть принято или отклонено условно.
DragEnterEvent предоставляет событие, которое отправляется целевому виджету при поступлении в него действия перетаскивания.
DragMoveEvent используется, когда выполняется действие перетаскивания.
DragLeaveEvent генерируется, когда действие перетаскивания покидает виджет.
DropEvent , с другой стороны, происходит, когда удаление завершено. Предлагаемое мероприятие действие может быть принято или отклонено условно.
пример
В следующем коде DragEnterEvent проверяет, содержат ли данные MIME события событие. Если да, предлагаемое действие события принимается, и текст добавляется как новый элемент в ComboBox.
import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class combo(QComboBox): def __init__(self, title, parent): super(combo, self).__init__( parent) self.setAcceptDrops(True) def dragEnterEvent(self, e): print e if e.mimeData().hasText(): e.accept() else: e.ignore() def dropEvent(self, e): self.addItem(e.mimeData().text()) class Example(QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): lo = QFormLayout() lo.addRow(QLabel("Type some text in textbox and drag it into combo box")) edit = QLineEdit() edit.setDragEnabled(True) com = combo("Button", self) lo.addRow(edit,com) self.setLayout(lo) self.setWindowTitle('Simple drag & drop') def main(): app = QApplication(sys.argv) ex = Example() ex.show() app.exec_() if __name__ == '__main__': main()
Приведенный выше код производит следующий вывод —