Михаиллл
МихаилллШілде 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 Т.Қ.

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

                                Пікірлер

                                Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                                Кіріңіз немесе Тіркеліңіз
                                OI
                                • Ora Iro
                                • Жел. 24, 2024, 6:38 Т.Ж.

                                C++ - Тест 001. Первая программа и типы данных

                                • Нәтиже:40ұпай,
                                • Бағалау ұпайлары-8
                                AD

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

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

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

                                • Нәтиже:80ұпай,
                                • Бағалау ұпайлары4
                                Соңғы пікірлер
                                ИМ
                                Игорь МаксимовҚар. 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 аналогично. Могу предположить, что из-за более новой верси…
                                Енді форумда талқылаңыз
                                n
                                nklyҚаң. 3, 2025, 2:52 Т.Ж.
                                Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
                                AW
                                Ayden WatkinsҚаң. 2, 2025, 12:09 Т.Ж.
                                Why Paying for a Research Paper Can Be a Smart Choice Writing a research paper can be a daunting task, especially when faced with tight deadlines, complex topics, or a lack of resources. For many students, paying for a research paper is a practical…
                                p
                                pimacontrols85Жел. 31, 2024, 9:39 Т.Ж.
                                Finding the Right Rittal Small Enclosure for Your Needs Rittal is a leading manufacturer of enclosures for industrial and IT applications. Their small enclosures offer a compact and reliable solution for a wide range of needs, from housing electronic…
                                Donald Randolph
                                Donald RandolphЖел. 30, 2024, 2:59 Т.Ж.
                                Personal Injury lawyer Santa Monica As an experienced Santa Monica personal injury lawyer, Donald C. Randolph has recovered over $100 Million in verdicts and settlements for our clients. In severe injury cases, this compensation i…
                                Nirvana Yoga School
                                Nirvana Yoga SchoolЖел. 30, 2024, 5:13 Т.Ж.
                                OAuth2.0 через VK, получение email Nirvana Yoga School is one of the most trusted and reputed traditional Rishikesh yoga courses , India certified by Yoga Alliance, USA. We aim to spread traditional yoga teachings so t…

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