Михаиллл
March 29, 2019, 7:31 p.m.

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

состояние, QML

Добрый день.

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

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

2

Do you like it? Share on social networks!

9
Evgenii Legotckoi
  • March 29, 2019, 7:42 p.m.

Добрый день.

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

    Михаиллл
    • March 29, 2019, 8:40 p.m.
    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.  
      Михаиллл
      • March 29, 2019, 8:53 p.m.

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

        Михаиллл
        • March 31, 2019, 5:44 p.m.

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

          Михаиллл
          • April 1, 2019, 2:13 p.m.

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

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

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

            Михаиллл
            • April 1, 2019, 2:33 p.m.
            • (edited)

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

              Михаиллл
              • April 1, 2019, 2:39 p.m.

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

                Михаиллл
                • April 1, 2019, 2:59 p.m.

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

                1. page1Button0.onClicked: { //left button
                2. state: "Page1State0"
                3. }
                  Михаиллл
                  • April 3, 2019, 12:30 p.m.
                  • The answer was marked as a solution.

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

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

                    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