Михаиллл
МихаилллШілде 26, 2019, 10:25 Т.Ж.

Можно ли в Qt WebView из с++ слоя перенести в qml?

Добрый день.
Можно ли в Qt WebView из с++ слоя перенести в qml? т.к. в qml он урезан

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

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

15
Pavel K.
  • Шілде 26, 2019, 11 Т.Ж.
  • (өңделген)

На плюсах пишется логика, в qml - делается отображение(модель)
Вы хотите всю логику писать в qml ?
Можно логику писать и в плюсах и в qml , разница лишь в том что вам не придется лопатить целые страницы qml чтобы что-то исправить (достаточно что-то в плюсах поменять), также логику с плюсами используют когда нужно динамически обьекты создавать на форме(к примеру).Посмотрите пожалуйста паттерны программирования MVC, MVP, MVVM , вам сразу все станет понятно.

    BlinCT
    • Шілде 26, 2019, 11:19 Т.Ж.

    Очень странное желание логику переносить в qml. Qml тем хорошо что это чистый frontend а кресты это логика. Зачем это менять не понимаю.

      Михаиллл
      • Шілде 26, 2019, 11:59 Т.Ж.

      Просто у WebView в с++ есть больше сигналов, в частности мне нужен сигнал о необходимости загрузки файла. В qml такого нет.

        Evgenii Legotckoi
        • Шілде 29, 2019, 3:35 Т.Ж.

        У меня вот есть мысль, что здесь есть только один способ.
        Слушать сигнал loadingChanged(loadRequest)

        А и того loadRequest брать url и смотреть на его расширение. Если расширение совпадает с расширением файла, то попытаться скачать, если похоже на страницу, то тогда отправить запрос на открытие новой странице. Довольно тупой подход, но иного я не нашёл.

        Правда я ещё не смотрел исходники QQuickWebView, вполне возможно, что там могут быть сигналы, которые не описаны в документации. В том числе и сигнал на скачивание файла.

          Михаиллл
          • Шілде 29, 2019, 3:52 Т.Ж.

          Пробую так дедалать, но пока касячно выходит. По одной из ошибок иногда можно определить ссылку для скачивания, иногда по расширению файла, но иногда кое-что не понятно как скачивать.
          Посмотрите пожалуйста, может быть все же есть какие-то другие сигналы, кроме loadingChanged

            Evgenii Legotckoi
            • Шілде 29, 2019, 3:58 Т.Ж.
            • (өңделген)

            Я не нашёл других сигналов в документации, надо смотреть исходники QQuickWebView. Если там что-то другое будет в секции signals, то значит это можно ииспользовать и в QML.

              Михаиллл
              • Шілде 29, 2019, 4:27 Т.Ж.

              А как это сделать?

                Evgenii Legotckoi
                • Шілде 29, 2019, 4:29 Т.Ж.
                • (өңделген)

                Скачать исходники, открыть файл qquickwebview.h, посмотреть. Исходники можно скачать и в Maintenance Tool

                  Михаиллл
                  • Шілде 29, 2019, 10:21 Т.Ж.
                  • (өңделген)

                  Есть такие сигналы, может быть знаете, как их можно определить для определения необходимости загрузки

                      void titleChanged();
                      void urlChanged();
                      Q_REVISION(1) void loadingChanged(QQuickWebViewLoadRequest *loadRequest);
                      void loadProgressChanged();
                  

                  а еще есть такое

                  Q_SLOTS:
                      void onRunJavaScriptResult(int id, const QVariant &variant);
                      void onFocusRequest(bool focus);
                      void onLoadingChanged(const QWebViewLoadRequestPrivate &loadRequest);
                  
                    Pavel K.
                    • Шілде 30, 2019, 2:23 Т.Ж.
                    • (өңделген)

                    можно протащить методы с++ в qml как компонент

                    main () {
                     qmlRegisterType<YourClass>("simple.YourClass", 1, 0, "YourClass");
                    
                     }
                    
                    import simple.YourClass 1.0
                    Page{
                        YourClass{
                        }
                    }
                    
                      Evgenii Legotckoi
                      • Шілде 30, 2019, 2:47 Т.Ж.

                      Не думаю, что это поможет. Обычный QWebView, который нужен топикстартеру, вряд ли получится протащить так просто. Классические виджеты вообще в QML не протаскиваются (обратный вариант возможен, то есть QQuickItem отобразить в QWidget, а вот наоборот уже нет, вырезали поддержку).

                      Ищ всего выше сказанного предполагаю, что придётся топикстартеру разбираться с определением того есть, то есть с тем скудным набором сигналов, который есть в QML WebView

                        Михаиллл
                        • Шілде 30, 2019, 3:06 Т.Ж.
                        • (өңделген)

                        А можно ли в нынешних версиях Qt создовать в с++ слое WebView, я попытался, но проект не запустился?
                        Выдает ошибку :dependent 'qtwebview.h' does not exist.

                          Михаиллл
                          • Шілде 30, 2019, 3:24 Т.Ж.

                          Вот по этой ссылке открываю картинку на телефоне, там есть кнопка скачать, а мне возвращаает url страницы с картинками. И не возвращает ошибок.
                          https://yandex.ru/search/touch/?text=иконка крест&lr=10765&mda=0
                          А оно должно выдавать сигнал и ссылку на скачивание.
                          Встроенными сигналами это не решеить.
                          Может быть у веб вью есть какая-либо характеристика, типа ссылки на скачиание?

                            Pavel K.
                            • Шілде 30, 2019, 10:28 Т.Ж.
                            • (өңделген)

                            кст есть еще setContextProperty и синглтоны , вот вам наглядный пример

                            #include<YourClass>
                            main(){
                            QScopedPointer<QQuickView> view(someWidget(QWidget etc.)::createView());
                            
                                ViewNavigator::instance().setRootContext(view->rootContext());
                                view->rootContext()->setContextProperty("YourClass", &YourClass::instance()); // через инстанс обращение
                            
                                view->setSource(someWidget(QWidget etc.)::pathToMainQml());
                                view->show();
                            }
                            
                            YourClass.h
                            #include <..>
                            #include <Macros.h>
                            
                            class YourClass {
                            private:
                                YourClass();
                                ~YourClass() = default;
                            
                            public:
                                SINGLETON(YourClass)
                            /* Properties */
                            public:
                            private:
                            //   etc.
                            }
                            
                            Macros.h
                            #pragma once
                            #include <QString>
                            
                            #define SINGLETON(x) static x& instance() { static x s; return s; }
                            

                            а в QML уже можно напрямую в свойстве вызывать :

                            Container{
                            yourProperty: YourClass.someMethod()
                            }
                            

                            грубо говоря, с помощью setContextProperty к классу можно обращяться из любой точки программы

                              Михаиллл
                              • Шілде 30, 2019, 1:13 Т.Қ.

                              Это замечательно. Но как это может в решении вопроса с получением сигнала на скачивание у вебВью?

                                Пікірлер

                                Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                                Кіріңіз немесе Тіркеліңіз
                                AD

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

                                • Нәтиже:50ұпай,
                                • Бағалау ұпайлары-4
                                m
                                • molni99
                                • Қаз. 26, 2024, 1:37 Т.Ж.

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

                                • Нәтиже:80ұпай,
                                • Бағалау ұпайлары4
                                m
                                • molni99
                                • Қаз. 26, 2024, 1:29 Т.Ж.

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

                                • Нәтиже:20ұпай,
                                • Бағалау ұпайлары-10
                                Соңғы пікірлер
                                ИМ
                                Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
                                Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                Evgenii Legotckoi
                                Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
                                Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                A
                                ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
                                Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                ИМ
                                Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
                                Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                d
                                dblas5Шілде 5, 2024, 11:02 Т.Ж.
                                QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                Енді форумда талқылаңыз
                                m
                                moogoҚар. 22, 2024, 7:17 Т.Ж.
                                Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
                                Evgenii Legotckoi
                                Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                                добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                                t
                                tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
                                google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                                NSProject
                                NSProjectМаусым 4, 2022, 3:49 Т.Ж.
                                Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

                                Бізді әлеуметтік желілерде бақылаңыз