a
ayb25 лютого 2020 р. 05:33

WebView

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

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

14
Evgenii Legotckoi
  • 25 лютого 2020 р. 05:52
  • (відредаговано)

Добрый день.

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

import QtQuick 2.12
import QtQuick.Window 2.12
import QtWebView 1.13
import QtQuick.Controls 2.13

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    TextField {
        id: textEdit
        anchors.left: parent.left
        anchors.top: parent.top
        anchors.right: button.left
    }

    Button {
        id: button
        text: "Go"
        anchors.top: parent.top
        anchors.right: parent.right

        onClicked: {
            webView.url = textEdit.text
        }
    }

    WebView {
        id: webView
        anchors.left: parent.left
        anchors.top: textEdit.bottom
        anchors.right: parent.right
        anchors.bottom: parent.bottom
    }
}

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

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

    a
    • 25 лютого 2020 р. 06:06
    • (відредаговано)

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

      a
      • 25 лютого 2020 р. 07:16

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

        Evgenii Legotckoi
        • 25 лютого 2020 р. 07:17

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

          a
          • 25 лютого 2020 р. 07:17
          • (відредаговано)
          id: expressPage
              allowedOrientations: Orientation.All
          
              function setUrl(str) {
                  webView.url = str
              }
          
              SilicaWebView {
                  id: webView
                  // PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView
                  PullDownMenu {
                      MenuItem {
                          text: qsTr("Вернуться на welcome")
                          onClicked: {
                              pageStack.clear()
                              pageStack.push(Qt.resolvedUrl("Welcome.qml"))
                          }
                      }
                      MenuItem {
                          text: qsTr("Выход")
                          onClicked: {
                              Qt.quit()
                          }
                      }
                  }
                  anchors.fill: parent
          
                  onLoadingChanged: {
                      console.log(webView.url)
                      webView.update()
                  }
          
                  quickScrollAnimating: true
          
                  experimental.preferences.webGLEnabled: true
                  experimental.preferences.notificationsEnabled: true
                  experimental.preferences.dnsPrefetchEnabled: true
                  experimental.preferences.javascriptEnabled: true
              }
          

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

            a
            • 25 лютого 2020 р. 07:23
            • (відредаговано)
            // To enable PullDownMenu, place our content in a SilicaFlickable
                SilicaListView {
                    id: flickId
                    anchors.fill: parent
            
                    // PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView
                    PullDownMenu {
                        MenuItem {
                            text: qsTr("Выход")
                            onClicked: {
                                webApp.setAddress("")
                                Qt.quit()
                            }
                        }
                    }
            
                    Column {
                        width: parent.width
                        spacing: Theme.paddingLarge
                        Label {
                            id: emptyLabel
                            height: mainPage.height / 3
                            width: parent.width
                        }
            
                        TextField {
                            id: textField
                            width: parent.width
            
                            horizontalAlignment: Text.AlignHCenter
                            anchors.horizontalCenter: parent.horizontalCenter
                            anchors.horizontalCenterOffset: Theme.horizontalPageMargin
                            placeholderText: qsTr("www.google.com")
                            validator: RegExpValidator { regExp: /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ }
                            onTextChanged: {
                                console.log(textField.text)
                            }
                        }
                        Button {
                            id: btnId
                            anchors.horizontalCenter: parent.horizontalCenter
                            text: "Send url"
                            onClicked: {
                                webApp.setUrl(textField.text)
                                pageStack.push(Qt.resolvedUrl("WebView.qml"))
                            }
                        }
                        Label {
                            id: orId
                            color: Theme.highlightBackgroundColor
                            anchors.horizontalCenter: parent.horizontalCenter
                            text: "or"
                        }
                        Button {
                            id: btnSettings
                            text: "Settings"
                            anchors.horizontalCenter: parent.horizontalCenter
                            onClicked: {
                                var urlPath = "http://" + initWeb.getAddress()
                                webApp.setUrl(urlPath)
                                pageStack.push(Qt.resolvedUrl("WebView.qml"))
                            }
                        }
            

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

              a
              • 25 лютого 2020 р. 07:24

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

                Evgenii Legotckoi
                • 25 лютого 2020 р. 07:41
                • (відредаговано)

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

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

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

                  a
                  • 25 лютого 2020 р. 07:44

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

                    Evgenii Legotckoi
                    • 25 лютого 2020 р. 07:46

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

                    Как-то так

                    pageStack.push(Qt.resolvedUrl("WebView.qml"))
                    var urlPath = "http://" + initWeb.getAddress()
                    pageStack.currentItem.setUrl(urlPath)
                    
                    
                      a
                      • 25 лютого 2020 р. 07:59

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

                        a
                        • 25 лютого 2020 р. 08:00

                          Evgenii Legotckoi
                          • 25 лютого 2020 р. 08:04
                          • (відредаговано)

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

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

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

                          Вы устанавливаете 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
                            • 25 лютого 2020 р. 08:06

                            Да

                              Коментарі

                              Only authorized users can post comments.
                              Please, Log in or Sign up
                              AD

                              C++ - Тест 004. Указатели, Массивы и Циклы

                              • Результат:50бали,
                              • Рейтинг балів-4
                              m
                              • molni99
                              • 26 жовтня 2024 р. 01:37

                              C++ - Тест 004. Указатели, Массивы и Циклы

                              • Результат:80бали,
                              • Рейтинг балів4
                              m
                              • molni99
                              • 26 жовтня 2024 р. 01:29

                              C++ - Тест 004. Указатели, Массивы и Циклы

                              • Результат:20бали,
                              • Рейтинг балів-10
                              Останні коментарі
                              ИМ
                              Игорь Максимов22 листопада 2024 р. 11:51
                              Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                              Evgenii Legotckoi
                              Evgenii Legotckoi31 жовтня 2024 р. 14:37
                              Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                              A
                              ALO1ZE19 жовтня 2024 р. 08:19
                              Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                              ИМ
                              Игорь Максимов05 жовтня 2024 р. 07:51
                              Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                              d
                              dblas505 липня 2024 р. 11:02
                              QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                              Тепер обговоріть на форумі
                              Evgenii Legotckoi
                              Evgenii Legotckoi24 червня 2024 р. 15:11
                              добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                              t
                              tonypeachey115 листопада 2024 р. 06:04
                              google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                              NSProject
                              NSProject04 червня 2022 р. 03:49
                              Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                              9
                              9Anonim25 жовтня 2024 р. 09:10
                              Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                              Слідкуйте за нами в соціальних мережах