Плъзнете и пуснете в Qt Преместване на изображения и текст - ИТ бележки
Плъзгане с мишката (Плъзнете и пуснете) е интуитивен жест, използван в много приложения. Не може да се каже, че това е най-добрият вариант за организиране на взаимодействие с програмата. Но не пречи да можете да вградите това поведение в Qt проекти.
Формулиране на проблема
Обикновено текстът и изображенията се считат за елементи с плъзгане и пускане. Ще създадем приложение, което може да премества едновременно текст и изображения. Той ще се състои от две джаджи.
Първата джаджа ще позволи зареждане на изображения от файловата система. Той също така ще се превърне в приспособление източник, поддържащо събитието Drag .
Ще направим втората джаджа приспособлението Drop приемник. Той ще може да приема всичко, което потребителят влачи от първата джаджа.
Ето как ще изглежда нашата програма:

Основна джаджа
Нека започнем със създаването на приспособление, което може да показва изображение и надпис под него.
Imagetextwidget.h заглавен файл:
В този код няма нищо специално, така че няма да се спираме на него.
Плъзнете джаджа
Приспособлението източник, от което можете да влачите текст и изображения, вече е по-интересно. Нека да разгледаме заглавния му файл dragwidget.h:
Целият смисъл е да уловим събитията при натискане на бутона на мишката mousePressEvent () и преместване на курсора mouseMoveEvent (). Забележете и полето от тип QPoint. В него ще съхраним позицията на началото на движението.
И ето реализацията на dragwidget.cpp:
Във функцията на член mousePressEvent () просто съхраняваме позицията на курсора там, където се е случило щракването. Основното действие се извършва в mouseMoveEvent (), което съответства на движението на мишката. Първо проверяваме дали плъзгането има смисъл, т.е. левият бутон на мишката е натиснат, има заредено изображение и изминатото разстояние от началната позиция надвишава определен минимум, който установяваме с помощта на QApplication: startDragDistance () .