Михаиллл
April 4, 2019, 4:44 p.m.

Как в QML изменить текст лэйбла

QML, Label, text

Добрый день.
Как в QML изменить текст лэйбла?
В файле Page1Form.ui.qml прописан лэйбл

  1. Label {
  2. id: page1Label2
  3. x: 122
  4. y: 409
  5. width: 156
  6. height: 56
  7. text: qsTr("1 из 20")
  8. horizontalAlignment: Text.AlignHCenter
  9. font.pointSize: 20
  10. }

В файле Page1.qml пытаюсь изменить текст лэйбла:

  1. page1Button0.onClicked: //left button
  2. {
  3. page1Label2.text = "text"
  4. }

Но это не работает, компилятор говорит что page1Button0 не определен.

2

Do you like it? Share on social networks!

17
Алексей Внуков
  • April 4, 2019, 4:49 p.m.

a page1Button0 существует? так уж сложилось, что при работе с QML нужно регулярно запускать qmake и пересобирать проект

    Михаиллл
    • April 4, 2019, 4:56 p.m.

    page1Button0 существует. запуск qmake не помог

      Алексей Внуков
      • April 4, 2019, 5:03 p.m.
      • (edited)

      без полного кода страниц тяжело сказать, кроме очевидного что компилятор не видит кнопку.

      п.с. по моему опыту, мне проще работать без Form, просто Page.qml, ее и в дизайнере можно открыть и так все необходимое на одной странице. как-то с формами не подружился

        Михаиллл
        • April 4, 2019, 5:25 p.m.

        Компилятор видит кнопку, но не видит лэйбел
        Вот код Page1Form.ui.qml

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

        вызвать пытаюсь в Page1.qml

        1. import QtQuick 2.4
        2. import QtQml 2.12
        3.  
        4. Page1Form {
        5.  
        6. page1Button0.onClicked: //left button
        7. {
        8. page1Label2.text = "weg"
        9. }
        10.  
        11. page1Button1.onClicked: //rigth button
        12. {
        13. state = "Page1State1"
        14. }
        15.  
        16. page1ButtonMenu.onClicked:
        17. {
        18. loader.source = "Page0.qml"
        19. }
        20.  
        21. }
        22.  
          Алексей Внуков
          • April 4, 2019, 6:15 p.m.
          • (edited)
          • The answer was marked as a solution.

          добавил в форму
          property alias page1Label2: page1Label2
          и все заработало. ну или обработку клик делать на форме, тоже работать будет

          а вот если бы было все в одном файле, то можно обойтись без алиасов

            Михаиллл
            • April 4, 2019, 6:25 p.m.

            Странно, но у меня все еще не работае.
            Покажите пожалуйста ваш вариант.
            Сделал так:

            1. Label {
            2. id: page1Label2
            3. x: 122
            4. y: 409
            5. width: 156
            6. height: 56
            7. text: qsTr("1 из 20")
            8. horizontalAlignment: Text.AlignHCenter
            9. font.pointSize: 20
            10. property alias page1Label2: page1Label2
            11. }
              Михаиллл
              • April 4, 2019, 6:35 p.m.

              Сделал так, заработало. Спасибо!

                Алексей Внуков
                • April 4, 2019, 6:43 p.m.
                • (edited)

                работать будет как так

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

                так и так

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

                и вот так тоже(без Form.ui)

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

                  Забыл код вставить.
                  При той задаче вот так заработало:

                  1. property alias page1Label2: page1Label2
                  2.  
                  3. Label {
                  4. id: page1Label2
                  5. x: 122
                  6. y: 409
                  7. width: 156
                  8. height: 56
                  9. text: qsTr("1 из 20")
                  10. horizontalAlignment: Text.AlignHCenter
                  11. font.pointSize: 20
                  12. }

                  Но при попытке сделать тоже действие из Page0.qml получаю старую ошибку.
                  Скажите пожалуйста, почему опять не видно этот лэйбел?

                    Михаиллл
                    • April 4, 2019, 6:47 p.m.

                    Забыл код вставить.
                    При той задаче вот так заработало:

                    1. property alias page1Label2: page1Label2
                    2.  
                    3. Label {
                    4. id: page1Label2
                    5. x: 122
                    6. y: 409
                    7. width: 156
                    8. height: 56
                    9. text: qsTr("1 из 20")
                    10. horizontalAlignment: Text.AlignHCenter
                    11. font.pointSize: 20
                    12. }

                    Но при попытке сделать тоже действие из Page0.qml получаю старую ошибку.
                    Скажите пожалуйста, почему опять не видно этот лэйбел?

                      Михаиллл
                      • April 4, 2019, 6:54 p.m.

                      Попробовал так:

                      1. Page1.page1Label2.text = "111 из "

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

                        Алексей Внуков
                        • April 4, 2019, 6:55 p.m.
                        • (edited)

                        еще работает такой вариант page.lable.text="some text" (page - это страница где нужный лейбл, при обрщении с одной страницы на другую, но при этом они должны быть все загружены и активны(например если в одном окне показывает сразу несколько страниц))

                        п.с. скорее всего при смене страницы через лоадер, старая страница становится недоступной. поэтому ее и не видно.

                          Михаиллл
                          • April 4, 2019, 7:01 p.m.

                          но оно еще все обнуляет при смене через лодер. никак не пойму, пока, как с этим обнулением бороться

                            Михаиллл
                            • April 4, 2019, 7:04 p.m.

                            и еще беда, в form.ui.qml почему то нельзя брать информацию из класса из с++ слоя.

                              Алексей Внуков
                              • April 4, 2019, 7:04 p.m.

                              как вариант, можно загружать несколько страниц одним пакетом, напремер через TabView, где каждый Tab нужная страница из одной группы, и через алиасы передавть значения(тогда может отпасть необходимость в лоадере). или можно передавть нужные значения в слой С++, и при загрузке новой страницы в лоадере брать данные из этого слоя

                                Алексей Внуков
                                • April 4, 2019, 7:07 p.m.

                                поэтому мне проще без форм

                                  Михаиллл
                                  • April 4, 2019, 7:08 p.m.

                                  хорошо придумано.

                                    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