a
Feb. 25, 2020, 4:33 p.m.

WebView

Задам, очень тупой вопрос, Как мне передать в url на webview, которая находится на другой странице, и затем я мог вернуться задать url, и подгрузить другую страницу. Условно говоря всего две qml - страница с webview, и первая с кнопкой и текстовым полем.

2

Do you like it? Share on social networks!

14
Evgenii Legotckoi
  • Feb. 25, 2020, 4:52 p.m.
  • (edited)

Добрый день.

Самый простой однооконный вариант реализуется так

  1. import QtQuick 2.12
  2. import QtQuick.Window 2.12
  3. import QtWebView 1.13
  4. import QtQuick.Controls 2.13
  5.  
  6. Window {
  7. visible: true
  8. width: 640
  9. height: 480
  10. title: qsTr("Hello World")
  11.  
  12. TextField {
  13. id: textEdit
  14. anchors.left: parent.left
  15. anchors.top: parent.top
  16. anchors.right: button.left
  17. }
  18.  
  19. Button {
  20. id: button
  21. text: "Go"
  22. anchors.top: parent.top
  23. anchors.right: parent.right
  24.  
  25. onClicked: {
  26. webView.url = textEdit.text
  27. }
  28. }
  29.  
  30. WebView {
  31. id: webView
  32. anchors.left: parent.left
  33. anchors.top: textEdit.bottom
  34. anchors.right: parent.right
  35. anchors.bottom: parent.bottom
  36. }
  37. }
  38.  

Результат выглядит так

Конкретно в вашем случае, если у вас два qml файла, нужно смотреть код, возможно нужно будет прописать alias`ы на нужные объекты, чтобы всё увязать друг с другом.

    a
    • Feb. 25, 2020, 5:06 p.m.
    • (edited)

    Спасибо, кажется понял, почему у меня не работало.

      a
      • Feb. 25, 2020, 6:16 p.m.

      Вообщем когда все было на одной странице все работало, На двух нет(

        Evgenii Legotckoi
        • Feb. 25, 2020, 6:17 p.m.

        я не экстрасенс. нужно смотреть ваш код

          a
          • Feb. 25, 2020, 6:17 p.m.
          • (edited)
          1. id: expressPage
          2. allowedOrientations: Orientation.All
          3.  
          4. function setUrl(str) {
          5. webView.url = str
          6. }
          7.  
          8. SilicaWebView {
          9. id: webView
          10. // PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView
          11. PullDownMenu {
          12. MenuItem {
          13. text: qsTr("Вернуться на welcome")
          14. onClicked: {
          15. pageStack.clear()
          16. pageStack.push(Qt.resolvedUrl("Welcome.qml"))
          17. }
          18. }
          19. MenuItem {
          20. text: qsTr("Выход")
          21. onClicked: {
          22. Qt.quit()
          23. }
          24. }
          25. }
          26. anchors.fill: parent
          27.  
          28. onLoadingChanged: {
          29. console.log(webView.url)
          30. webView.update()
          31. }
          32.  
          33. quickScrollAnimating: true
          34.  
          35. experimental.preferences.webGLEnabled: true
          36. experimental.preferences.notificationsEnabled: true
          37. experimental.preferences.dnsPrefetchEnabled: true
          38. experimental.preferences.javascriptEnabled: true
          39. }

          Примерно как выглядит webview, может я что-то не дописал

            a
            • Feb. 25, 2020, 6:23 p.m.
            • (edited)
            1. // To enable PullDownMenu, place our content in a SilicaFlickable
            2. SilicaListView {
            3. id: flickId
            4. anchors.fill: parent
            5.  
            6. // PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView
            7. PullDownMenu {
            8. MenuItem {
            9. text: qsTr("Выход")
            10. onClicked: {
            11. webApp.setAddress("")
            12. Qt.quit()
            13. }
            14. }
            15. }
            16.  
            17. Column {
            18. width: parent.width
            19. spacing: Theme.paddingLarge
            20. Label {
            21. id: emptyLabel
            22. height: mainPage.height / 3
            23. width: parent.width
            24. }
            25.  
            26. TextField {
            27. id: textField
            28. width: parent.width
            29.  
            30. horizontalAlignment: Text.AlignHCenter
            31. anchors.horizontalCenter: parent.horizontalCenter
            32. anchors.horizontalCenterOffset: Theme.horizontalPageMargin
            33. placeholderText: qsTr("www.google.com")
            34. validator: RegExpValidator { regExp: /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ }
            35. onTextChanged: {
            36. console.log(textField.text)
            37. }
            38. }
            39. Button {
            40. id: btnId
            41. anchors.horizontalCenter: parent.horizontalCenter
            42. text: "Send url"
            43. onClicked: {
            44. webApp.setUrl(textField.text)
            45. pageStack.push(Qt.resolvedUrl("WebView.qml"))
            46. }
            47. }
            48. Label {
            49. id: orId
            50. color: Theme.highlightBackgroundColor
            51. anchors.horizontalCenter: parent.horizontalCenter
            52. text: "or"
            53. }
            54. Button {
            55. id: btnSettings
            56. text: "Settings"
            57. anchors.horizontalCenter: parent.horizontalCenter
            58. onClicked: {
            59. var urlPath = "http://" + initWeb.getAddress()
            60. webApp.setUrl(urlPath)
            61. pageStack.push(Qt.resolvedUrl("WebView.qml"))
            62. }
            63. }

            Это первая страница

              a
              • Feb. 25, 2020, 6:24 p.m.

              Функция getAddress, возвращает строку из qsettings, из плюсовой части.

                Evgenii Legotckoi
                • Feb. 25, 2020, 6:41 p.m.
                • (edited)

                так у вас ещё не чистый QML а Sailfish framework... Но тут очевидно ошибки логические и отсутствие правильного доступа к id. Дело не в самом фреймворке.

                Как называются эти две страницы и как они соотносятся друг с другом. Вторая страница вложена в первую? Первая называется WebView.qml? Что такое pageStack и откуда вы его взяли? Я не вижу в коде id: pageStack, да и обращение к id webApp во второй странице в этом коде является некорректным, поскольку доступа к нему нет.

                P/S/ в дальнейшем используйте специальный диалог для вставки программного кода на сайте. В toolbar редактора находится. Иначе некорректно делается форматирование.

                  a
                  • Feb. 25, 2020, 6:44 p.m.

                  Извините описался, уже поправил, страницы Welcome и WebApp.

                    Evgenii Legotckoi
                    • Feb. 25, 2020, 6:46 p.m.

                    тем не менее я не вижу pageStack, если это классический StackView, то сначала нужно загрузить в него WebView.qml, а потом пытаться загружать url

                    Как-то так

                    1. pageStack.push(Qt.resolvedUrl("WebView.qml"))
                    2. var urlPath = "http://" + initWeb.getAddress()
                    3. pageStack.currentItem.setUrl(urlPath)
                    4.  
                      a
                      • Feb. 25, 2020, 6:59 p.m.

                      Спасибо, исправил. Буду разбираться дальше, он что и сам обновляться не хочет

                        a
                        • Feb. 25, 2020, 7 p.m.

                          Evgenii Legotckoi
                          • Feb. 25, 2020, 7:04 p.m.
                          • (edited)

                          Вот знаете, это вот треш

                          1. onUrlChanged: {
                          2. console.log(webView.url)
                          3. webView.url = "http://www.google.com/"
                          4. }

                          Представляете, как это работает?

                          Вы устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url, срабатывает onUrlChanged, выводит в консоль, вы снова устанавливаете url

                          Понятно?

                            a
                            • Feb. 25, 2020, 7:06 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