Pavel K.
20 сентября 2019 г. 14:56

Работа с MultiPointTouchArea (drag n drop + zoom)

QML C++

Привет , подскажите кто-нибудь , как сделать драг н дроп , не нарушая при этом логику работы зума?

  1. import QtQuick 2.6
  2. import QtGraphicalEffects 1.0
  3.  
  4. Page {
  5. id:win
  6. property string filepath
  7. // width:parent.width * 0.5
  8. // height:parent.height * 0.5
  9.  
  10. MultiPointTouchArea {
  11. id: multiPoint
  12. anchors.fill: parent
  13. maximumTouchPoints : 2
  14. minimumTouchPoints : 1
  15. touchPoints: [
  16. TouchPoint { id: point1 },
  17. TouchPoint { id: point2 }
  18. ]
  19. property real factor: 1
  20. property bool isReleased: false // ignore the TouchUpdate after released
  21. onTouchUpdated: {
  22. console.log("touch upd")
  23. if(isReleased){
  24. isReleased = false
  25. return
  26. }
  27. if(point1.x != 0 && point2.x != 0){
  28. var s = Math.sqrt(Math.pow(point1.x - point2.x, 2) + Math.pow(point1.y - point2.y, 2)) /
  29. Math.sqrt(Math.pow(point1.startX - point2.startX, 2) + Math.pow(point1.startY - point2.startY, 2))
  30. rect.scale = s * factor
  31. } else {
  32. rect.beginDrag = Qt.point(rect.x, rect.y) ?????????
  33. }
  34. }
  35. onReleased: {
  36. console.log("realesed upd")
  37. multiPoint.factor = rect.scale
  38. isReleased = true
  39. }
  40. Rectangle {
  41. id: rect
  42. width: Screen.width
  43. height: Screen.height
  44. z: mouseArea.drag.active || mouseArea.pressed ? 2 : 1
  45. x: 0 //Math.random() * (win.width / 2 - 100)
  46. y: 0
  47. property point beginDrag
  48. color : "transparent"
  49. border { width:2; color: "transparent" }
  50. radius: 5
  51. Drag.active: mouseArea.drag.active
  52. Image {
  53. id: image
  54. width: rect.width
  55. height: rect.height
  56. anchors.centerIn: parent
  57. fillMode: Image.PreserveAspectFit
  58. source: filepath
  59. }
  60. // MouseArea {
  61. // id: mouseArea
  62.  
  63. // anchors.fill: image
  64. // drag.target: rect
  65. // enabled:multiPoint.isReleased
  66. // visible: multiPoint.isReleased
  67. // onPressed: {
  68. // console.log("mouse pressed + state: " + isReleased)
  69. // rect.beginDrag = Qt.point(rect.x, rect.y)
  70. // }
  71. // }
  72. }
  73. }
  74. }
  75.  
  76.  
2

Вам это нравится? Поделитесь в социальных сетях!

0

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
  • Последние комментарии
  • Evgenii Legotckoi
    16 апреля 2025 г. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 апреля 2025 г. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    1 апреля 2025 г. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    9 марта 2025 г. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    9 марта 2025 г. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…