Есть ли способ проверить, установлено ли для QLabel pixmap что-то конкретное? - PullRequest
0 голосов
/ 13 января 2019

Я создаю приложение Qt, и у меня есть часть, где я могу перетаскивать QLabel из одного кадра в другой, и мне нужно знать, какая метка перетаскивается, но я не знаю, как это проверить. Есть ли функция или метод для этого?

1 Ответ

0 голосов
/ 13 января 2019

Предполагая, что вы обрабатываете drop-действия, переопределяя метод dropEvent(QDropEvent *) в подклассе некоторого типа QWidget, вы можете вызвать QDropEvent :: source () , чтобы получить указатель на виджет, который пользователь нажал, чтобы начать перетаскивание. Затем вы можете использовать этот указатель, чтобы выполнить поиск в таблице / списке указателей известных источников перетаскивания, или использовать dynamic_cast<QLabel*>() для него, чтобы попытаться получить из него указатель QLabel, чтобы можно было вызвать * 1006. * методы на нем или т. д.

Обратите внимание, что этот метод работает, только если операция перетаскивания запущена в вашем приложении. Конечно, это не будет работать, если операция перетаскивания пришла из какого-то другого приложения, потому что в этом случае источник-виджет не находится в пространстве процесса вашей программы, и поэтому нет способа получить указатель на него.

Несколько более элегантный альтернативный метод - добавить виджет-источник к идентификатору QMimeData , а затем вызвать setMimeData () в * 1015 Объект * QDrag перед вызовом exec () . Затем получающий виджет может посмотреть на объект QMimeData , возвращаемый QDropEvent :: mimeData () , чтобы получить эту информацию. Это немного лучше, поскольку он будет работать через границы процессов, и безопаснее, поскольку у вас нет связанных виджетов, разыменовывающих указатели друг на друга или пытающихся уменьшить указатели QObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...