Класс QDrag
Класс QDrag обеспечивает поддержку передачи данных с помощью MIME при перетаскивании. Подробнее...
| Заголовок: | #include <QDrag> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Наследуется от: | QObject |
Открытые функции
| QDrag(QObject *dragSource) | |
| virtual | ~QDrag() |
| Qt::DropAction | defaultAction() const |
| QPixmap | dragCursor(Qt::DropAction action) const |
| Qt::DropAction | exec(Qt::DropActions supportedActions = Qt::MoveAction) |
| Qt::DropAction | exec(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction) |
| QPoint | hotSpot() const |
| QMimeData * | mimeData() const |
| QPixmap | pixmap() const |
| void | setDragCursor(const QPixmap &cursor, Qt::DropAction action) |
| void | setHotSpot(const QPoint &hotspot) |
| void | setMimeData(QMimeData *data) |
| void | setPixmap(const QPixmap &pixmap) |
| QObject * | source() const |
| Qt::DropActions | supportedActions() const |
| QObject * | target() const |
Сигналы
| void | actionChanged(Qt::DropAction action) |
| void | targetChanged(QObject *newTarget) |
Статические открытые члены
| void | cancel() |
Подробное описание
Перетаскивание — интуитивный способ копирования или перемещения данных в приложении, используемый во многих настольных средах как механизм для копирования данных между приложениями. Поддержка перетаскивания в Qt сосредоточена вокруг класса QDrag, который обрабатывает большинство деталей операции перетаскивания.
Данные, которые должны быть переданы во время перетаскивания, содержатся в объекте QMimeData. Это задаётся функцией setMimeData() следующим образом:
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
mimeData->setText(commentEdit->toPlainText());
drag->setMimeData(mimeData); Обратите внимание, что setMimeData() назначает владение объектом QMimeData объекту QDrag. Объект QDrag должен быть создан в куче с родительским объектом QObject, чтобы Qt мог корректно очистить ресурсы после завершения операции перетаскивания.
Для визуализации данных во время перетаскивания можно использовать пикчуру, которая будет перемещаться вместе с курсором к целевому элементу. Эта пикчура обычно отображает значок, представляющий тип MIME передаваемых данных, но с помощью setPixmap() можно установить любую пикчуру. Положение курсора относительно левого верхнего угла пикчуры может быть задано с помощью функции setHotSpot(). Следующий код размещает пикчуру так, чтобы горячая точка курсора указывала на центр нижнего края:
drag->setHotSpot(QPoint(drag->pixmap().width()/2,
drag->pixmap().height())); Примечание: В X11 пикчура может не успевать за перемещениями мыши, если горячая точка расположена так, что пикчура отображается прямо под курсором.
Источники и целевые виджеты можно получить с помощью source() и target(). Эти функции часто используются для определения того, началась и завершилась ли операция перетаскивания в одном и том же виджете, чтобы можно было реализовать специальное поведение.
QDrag только отвечает за саму операцию перетаскивания. Разработчик должен определить, когда начинается операция перетаскивания, и как должен быть создан и использован объект QDrag. Для заданного виджета часто требуется переопределить mousePressEvent(), чтобы определить, нажал ли пользователь кнопку мыши, и переопределить mouseMoveEvent(), чтобы проверить, требуется ли QDrag.
См. также Перетаскивание и отпускание, QClipboard, QMimeData, Пример перетаскиваемых значков, Пример перетаскиваемого текста, Пример элемента назначения и Пример холодильников-магнит.
Документация по функциям членов
QDrag::QDrag(QObject *dragSource)
Создаёт новый объект перетаскивания для виджета, указанного параметром dragSource.
[signal] void QDrag::actionChanged(Qt::DropAction action)
Этот сигнал излучается, когда изменяется действие, связанное с перетаскиванием.
См. также targetChanged().
[signal] void QDrag::targetChanged(QObject *newTarget)
Этот сигнал излучается, когда изменяется целевой объект операции перетаскивания и отпускания, причём newTarget — новый целевой объект.
См. также target() и actionChanged().
[virtual] QDrag::~QDrag()
Удаляет объект перетаскивания.
[static, since 5.7] void QDrag::cancel()
Отменяет операцию перетаскивания, начатую Qt.
Примечание: В настоящее время реализовано в Windows и X11.
Эта функция была добавлена в Qt 5.7.
См. также exec().
Qt::DropAction QDrag::defaultAction() const
Возвращает предлагаемое по умолчанию действие отпускания для этой операции перетаскивания.
См. также exec() и supportedActions().
[since 5.0] QPixmap QDrag::dragCursor(Qt::DropAction action) const
Возвращает курсор перетаскивания для действия.
Эта функция была добавлена в Qt 5.0.
См. также setDragCursor().
Qt::DropAction QDrag::exec(Qt::DropActions supportedActions = Qt::MoveAction)
Запускает операцию перетаскивания и отпускания и возвращает значение, указывающее запрошенное действие отпускания по завершении. Действия отпускания, которые пользователь может выбрать, задаются в supportedActions. Предлагаемое по умолчанию действие будет выбрано среди разрешённых действий в следующем порядке: перемещение, копирование и ссылка.
Примечание: В Linux и macOS операция перетаскивания может занять некоторое время, но эта функция не блокирует цикл обработки событий. Другие события всё ещё доставляются в приложение, пока выполняется операция. В Windows цикл обработки событий Qt блокируется во время операции.
См. также cancel().
Qt::DropAction QDrag::exec(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction)
Запускает операцию перетаскивания и отпускания и возвращает значение, указывающее запрошенное действие отпускания по завершении. Действия отпускания, которые пользователь может выбрать, задаются в supportedActions.
defaultDropAction определяет, какое действие будет предложено, когда пользователь выполняет перетаскивание без использования модификаторов.
Примечание: В Linux и macOS операция перетаскивания может занимать некоторое время, но эта функция не блокирует цикл событий. Другие события всё ещё доставляются в приложение во время выполнения операции. В Windows цикл событий Qt блокируется во время операции. Однако QDrag::exec() в Windows вызывает процесс processEvents() часто, чтобы сохранить отзывчивость графического интерфейса. Если какие-либо циклы или операции вызываются во время активной операции перетаскивания, это заблокирует операцию перетаскивания.
QPoint QDrag::hotSpot() const
Возвращает позицию точки привязки относительно левого верхнего угла курсора.
См. также setHotSpot().
QMimeData *QDrag::mimeData() const
Возвращает данные MIME, инкапсулированные объектом перетаскивания.
См. также setMimeData().
QPixmap QDrag::pixmap() const
Возвращает растровое изображение, используемое для представления данных в операции перетаскивания.
См. также setPixmap().
void QDrag::setDragCursor(const QPixmap &cursor, Qt::DropAction action)
Устанавливает курсор перетаскивания cursor для action. Это позволяет переопределить стандартные системные курсоры. Чтобы вернуться к использованию системного курсора для action, передайте пустое растровое изображение QPixmap в качестве cursor.
Примечание: установка курсора перетаскивания для IgnoreAction может не работать на всех платформах. Тестировалось на X11 и macOS. Windows не поддерживает эту функцию.
См. также dragCursor().
void QDrag::setHotSpot(const QPoint &hotspot)
Устанавливает позицию точки привязки относительно левого верхнего угла растрового изображения, используемого в точке, указанной hotspot.
Примечание: в X11 растровое изображение может не успевать за перемещением мыши, если точка привязки приводит к тому, что растровое изображение отображается непосредственно под курсором.
См. также hotSpot().
void QDrag::setMimeData(QMimeData *data)
Устанавливает данные, которые будут отправлены в заданные MIME data. Владение данными передается объекту QDrag.
См. также mimeData().
void QDrag::setPixmap(const QPixmap &pixmap)
Устанавливает pixmap в качестве растрового изображения, используемого для представления данных в операции перетаскивания. Вы можете установить растровое изображение только перед началом перетаскивания.
См. также pixmap().
QObject *QDrag::source() const
Возвращает источник объекта перетаскивания. Это виджет, откуда началась операция перетаскивания.
Qt::DropActions QDrag::supportedActions() const
Возвращает набор возможных действий перетаскивания для данной операции.
См. также exec() и defaultAction().
QObject *QDrag::target() const
Возвращает целевой объект операции перетаскивания. Это виджет, куда был перетащен объект.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qdrag.html