Qt 5.15 => 6.10: QML с WebView в приложении виджета показывает пустое поле вместо веб-страницы на AndroidC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Qt 5.15 => 6.10: QML с WebView в приложении виджета показывает пустое поле вместо веб-страницы на Android

Сообщение Anonymous »

Я разрабатываю мобильное приложение для Android с использованием виджетов. Одна из форм моего приложения должна отображать веб-страницу. Для этого я использую QML с WebView (QQuickWidget в виджете формы, который отображает страницу QML с одним объектом QtWebView). При компиляции проекта с помощью Qt 5.15 все работает нормально, веб-страница отображается корректно. Однако при компиляции проекта с Qt 6.10 вместо страницы вижу пустое поле. Однако, судя по выводам консоли QtWebView, страница загрузилась.
В чем может быть проблема?
В документации doc.qt.io/qt-6/qtwebengine-platform-notes.html я нашел информацию об отключении песочницы с помощью флага QTWEBENGINE_DISABLE_SANDBOX, но этого не произошло. help.
Ниже приведены исходные коды тестового приложения, позволяющего протестировать такое поведение.
test.pro
QT += core
QT += gui
QT += quickwidgets
QT += qml
QT += quick
QT += webview

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

SOURCES += \
main.cpp \
mainwindow.cpp

HEADERS += \
mainwindow.h

qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

RESOURCES += \
test.qrc

DISTFILES += \
../test.pro/AndroidManifest.xml \
../test.pro/build.gradle \
../test.pro/gradle.properties \
../test.pro/gradle/wrapper/gradle-wrapper.jar \
../test.pro/gradle/wrapper/gradle-wrapper.properties \
../test.pro/gradlew \
../test.pro/gradlew.bat \
../test.pro/res/values/libs.xml \
../test.pro/res/xml/qtprovider_paths.xml \
android/AndroidManifest.xml \
android/build.gradle \
android/gradle.properties \
android/gradle/wrapper/gradle-wrapper.jar \
android/gradle/wrapper/gradle-wrapper.properties \
android/gradlew \
android/gradlew.bat \
android/res/values/libs.xml \
android/res/xml/qtprovider_paths.xml

contains(ANDROID_TARGET_ARCH,arm64-v8a) {
ANDROID_PACKAGE_SOURCE_DIR = \
$$PWD/../test.pro
}

ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android

main.cpp
#include
#include
#include "mainwindow.h"

int main(int argc, char *argv[])
{
QtWebView::initialize();
qputenv("QTWEBENGINE_DISABLE_SANDBOX", "1");

QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}


mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include
#include

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

protected:
QQuickWidget *mp_widget_webview;

protected:
virtual void resizeEvent(QResizeEvent *event) override;
};
#endif // MAINWINDOW_H

mainwindow.cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
mp_widget_webview=new QQuickWidget(this);
mp_widget_webview->setSource(QUrl("qrc:/test.qml"));
mp_widget_webview->setResizeMode(QQuickWidget::SizeRootObjectToView);
mp_widget_webview->show();
}

MainWindow::~MainWindow() {}

void MainWindow::resizeEvent(QResizeEvent *event)
{
Q_UNUSED(event)
QRect r=rect();
mp_widget_webview->setGeometry(r);
}

test.qml
import QtQuick 2.5
import QtQuick.Controls 2.1
import QtWebView 1.1

Item {
WebView {
id: webView
anchors.centerIn: parent
anchors.fill: parent
url: "https://qt.io"
onLoadingChanged: function(loadRequest) {
if (loadRequest.errorString)
console.error("Load error: "+loadRequest.errorString);
else
console.error("Load success: "+loadRequest.url);
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... instead-of
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»