Я разрабатываю мобильное приложение для 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
Qt 5.15 => 6.10: QML с WebView в приложении виджета показывает пустое поле вместо веб-страницы на Android ⇐ C++
Программы на C++. Форум разработчиков
1761566390
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.
Ниже приведены исходные коды тестового приложения, позволяющего протестировать такое поведение.
[b]test.pro[/b]
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
[b]main.cpp[/b]
#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();
}
[b]mainwindow.h[/b]
#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
[b]mainwindow.cpp[/b]
#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);
}
[b]test.qml[/b]
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);
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79801790/qt-5-15-6-10-qml-with-webview-in-the-widget-app-shows-empty-field-instead-of[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия