Михаиллл
29 марта 2019 г. 19:31

Как в QML сделать переход между состояниями

состояние, QML

Добрый день.

На одной из страниц я сделал 3 состояния

Как сделать переключение из 1 состояния во 2 или 3 состояние и обратно при нажатии кнопки?

2

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

9
Evgenii Legotckoi
  • 29 марта 2019 г. 19:42

Добрый день.

Без кода тут даже подсказывать нечего.

    Михаиллл
    • 29 марта 2019 г. 20:40
    1. import QtQuick 2.4
    2. import QtQuick.Controls 2.2
    3.  
    4. Item {
    5. id: element
    6. width: 400
    7. height: 600
    8. property alias page1ButtonMenu: page1ButtonMenu
    9.  
    10. Button {
    11. id: page1Button0
    12. x: 66
    13. y: 172
    14. width: 128
    15. height: 128
    16. //font.capitalization: Font.AllUppercase
    17. //display: AbstractButton.TextOnly
    18. //topPadding: 5
    19. Image {
    20. id: image
    21. width: 130
    22. height: 130
    23. anchors.topMargin: 0
    24. anchors.leftMargin: 0
    25. anchors.rightMargin: 0
    26. anchors.bottomMargin: 0
    27. anchors.fill: parent
    28. source: "qrc:/images/images/close.png"
    29. fillMode: Image.Stretch
    30. }
    31. }
    32.  
    33. Button {
    34. id: page1Button1
    35. x: 251
    36. y: 172
    37. width: 130
    38. height: 130
    39. Image {
    40. id: image1
    41. width: 130
    42. height: 130
    43. anchors.rightMargin: 0
    44. anchors.bottomMargin: 0
    45. anchors.fill: parent
    46. source: "qrc:/images/images/close.png"
    47. fillMode: Image.Stretch
    48. }
    49. }
    50.  
    51. Button {
    52. id: page1ButtonMenu
    53. x: 150
    54. y: 479
    55. text: qsTr("МЕНЮ")
    56. font.pointSize: 18
    57. }
    58.  
    59. Label {
    60. id: page1labe0
    61. x: 57
    62. y: 47
    63. width: 286
    64. height: 33
    65. text: qsTr("Выберете красный цвет")
    66. horizontalAlignment: Text.AlignHCenter
    67. font.pixelSize: 22
    68. font.family: "Verdana"
    69. font.weight: Font.Thin
    70. }
    71.  
    72. Label {
    73. id: page1Label1
    74. x: 122
    75. y: 358
    76. width: 156
    77. height: 56
    78. text: qsTr("Побед: 0%")
    79. font.pointSize: 20
    80. horizontalAlignment: Text.AlignHCenter
    81. }
    82. states: [
    83. State {
    84. name: "State1"
    85.  
    86. PropertyChanges {
    87. target: image
    88. source: "images/red.png"
    89. }
    90.  
    91. PropertyChanges {
    92. target: image1
    93. source: "images//black.png"
    94. }
    95. },
    96. State {
    97. name: "State2"
    98.  
    99. PropertyChanges {
    100. target: image
    101. source: "images//black.png"
    102. }
    103.  
    104. PropertyChanges {
    105. target: image1
    106. source: "images//red.png"
    107. }
    108. }
    109. ]
    110. }
    111.  
      Михаиллл
      • 29 марта 2019 г. 20:53

      и отсюда еще один вопрос: фактически 3 состояния, а в коде только 2. почему так? как с этим работать?

        Михаиллл
        • 31 марта 2019 г. 17:44

        как я понял нужно сделать третий states и вызвавть так states:имя состояния

          Михаиллл
          • 1 апреля 2019 г. 14:13

          Хотя почему то не работает.
          В файле main.qml прописал

          1. Loader
          2. {
          3. id: loader
          4. anchors.fill: parent
          5. source: "Page1.qml"
          6. state: "Page1State1"
          7. }

          но почему то состояние не меняется. Скажите пожалуйста почему так и как исправть.

            Михаиллл
            • 1 апреля 2019 г. 14:33
            • (ред.)

            а если я в описании страницы Page1 прописываю state: "Page1State2", то почему то не загружаются картинки

              Михаиллл
              • 1 апреля 2019 г. 14:39

              Извините, с картинками разобрался, но вот как включать нужное состояние из других частей проекта, пока не понятно

                Михаиллл
                • 1 апреля 2019 г. 14:59

                Также попробовал прикрепить переход к сигналу кнопки, но переход не работает

                1. page1Button0.onClicked: { //left button
                2. state: "Page1State0"
                3. }
                  Михаиллл
                  • 3 апреля 2019 г. 12:30
                  • Ответ был помечен как решение.

                  Вот так заработало

                  1. page1Button0.onClicked: { //left button
                  2. state = "Page1State2"
                  3. }

                    Комментарии

                    Только авторизованные пользователи могут публиковать комментарии.
                    Пожалуйста, авторизуйтесь или зарегистрируйтесь