Pavel K.
Sept. 20, 2019, 2:56 p.m.

Работа с 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

Do you like it? Share on social networks!

0

Comments

Only authorized users can post comments.
Please, Log in or Sign up
  • Last comments
  • AK
    April 1, 2025, 11:41 a.m.
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    March 9, 2025, 9:02 p.m.
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    March 9, 2025, 4:14 p.m.
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
  • ИМ
    Nov. 22, 2024, 9:51 p.m.
    Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
  • Evgenii Legotckoi
    Oct. 31, 2024, 11:37 p.m.
    Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup