QWebEngineView 加载网页空白

QWebEngineView 使用时,加载本地的html页面 出现白屏,并且QWebEngineView没有收到loadProgress 信号,在其他电脑没问题,html网页没有问题
代码如下;



#include 
#include 
#include 
#include 
#include 
#include 
#include 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

     // 创建主窗口
    QDialog window;
    window.setWindowTitle("交易要素信息");
    window.setWindowFlags(Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint);

    // 设置窗口大小和位置
    int width = 64 * 12;
    int height = 42 * 12;
    QRect desktopRect = QGuiApplication::screens().at(0)->availableGeometry(); // 使用 QGuiApplication 获取屏幕几何形状
    window.setGeometry(desktopRect.width() - width, desktopRect.height() - height, width, height);

    // 加载本地 HTML 文件
    QString htmlFilePath = "index.html";
    QUrl url = QUrl::fromLocalFile(htmlFilePath);
    QWebEngineView view(&window);


    view.load(url);
    QObject::connect(&view, &QWebEngineView::loadProgress, [](int progress) {
        qDebug() << "Loading progress:" << progress;
    });

    QObject::connect(&view, &QWebEngineView::loadFinished, [](bool ok) {
        qDebug() << "Loading finished:" << ok;
    });
    // 将 QWebEngineView 添加到主窗口中
    QVBoxLayout layout(&window);
    layout.addWidget(&view);
    // 设置窗口固定大小
    window.setFixedSize(width, height);
    window.setWindowFlag(Qt::MSWindowsFixedSizeDialogHint);
    // 显示主窗口
    window.show();
     //window.close();
    return a.exec();
}

运行时日志:

QML debugging is enabled. Only use this in a safe environment.
qt.webenginecontext: 

GL Type: desktop
Surface Type: OpenGL
Surface Profile: NoProfile
Surface Version: 3.2
QSG RHI Backend: OpenGL
Using Supported QSG Backend: yes
Using Software Dynamic GL: no
Using Multithreaded OpenGL: no

Init Parameters:
  *  application-name showHtml 
  *  browser-subprocess-path /home/ChenDong/qt/qtSetApp/6.3.2/gcc_64/libexec/QtWebEngineProcess 
  *  disable-features ConsolidatedMovementXY,InstalledApp,BackgroundFetch,WebOTP,WebPayments,WebUSB,PictureInPicture 
  *  disable-setuid-sandbox  
  *  disable-speech-api  
  *  enable-features NetworkServiceInProcess,TracingServiceInProcess 
  *  enable-threaded-compositing  
  *  enable-use-zoom-for-dsf false 
  *  in-process-gpu  
  *  use-gl desktop 



![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/016613934186114.png "#left")

可能是因为本地 HTML 文件的路径不正确导致的。可以尝试使用绝对路径来加载 HTML 文件,或者检查相对路径是否正确。

在layout.addWidget(&view);这一句后面,再调用一下setlayout()函数
window.setlayout(layout);

引用new bing部分回答作答:
根据您提供的代码和日志,您使用的是 Qt 的 WebEngine 模块来显示本地 HTML 页面,并且在运行时出现了白屏的问题。

在此情况下,可能会有以下原因导致出现白屏:

1 HTML 文件路径错误:请检查 htmlFilePath 变量指定的本地 HTML 文件路径是否正确。

2 Qt 版本问题:请确保您使用的 Qt 版本支持 WebEngine 模块,并且已正确安装和配置。您可以尝试在其他电脑上运行相同的代码,以确认是否存在版本问题。

3 WebEngineView 加载 HTML 失败:您可以尝试添加错误处理来获取更多有关加载失败的信息。例如,您可以连接 WebEngineView 的 loadFinished 信号,并检查 ok 参数是否为 false。您也可以使用 WebEngineView 的 page() 方法来获取页面的错误信息。

4 其他原因:可能还存在其他导致问题的原因,例如网络连接问题或缺少必要的依赖项。您可以尝试在其他电脑上运行相同的代码,以排除这些问题。

另外,您也可以尝试清除 Qt 缓存并重新构建项目,以解决一些常见的问题。您可以使用以下命令来清除 Qt 缓存:

make clean
rm -rf .qmake.stash .qmake.super

然后重新构建您的项目。

希望这些建议可以帮助您解决问题。

引用chatGPT作答,以下是一些可能有用的建议:

1.确保 index.html 文件位于正确的位置。可以使用绝对路径或相对路径指定文件位置,例如:

QString htmlFilePath = "/path/to/index.html"; // 绝对路径
QString htmlFilePath = "path/to/index.html"; // 相对路径

2.确保您的应用程序具有读取 index.html 文件的权限。

3.尝试在 load() 调用之前设置视图的大小,例如:

QWebEngineView view(&window);
view.setFixedSize(width, height); // 设置视图大小
view.load(url);

4.尝试在视图加载完成后使用 show() 显示窗口,例如:

QObject::connect(&view, &QWebEngineView::loadFinished, [&window]() {
    qDebug() << "Loading finished";
    window.show(); // 显示窗口
});

5.如果上述步骤都不起作用,请尝试在其他电脑上运行应用程序,看看是否有任何区别。如果问题仅在一个计算机上出现,请考虑检查该计算机上的网络设置和安全软件设置,以确保您的应用程序可以访问本地文件和网络资源。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据您提供的代码和日志,可以尝试以下几个解决方案:

  1. 添加 QWebEnginePage 对象并将其设置为 QWebEngineView 的页面,然后重新加载页面。
// 加载本地 HTML 文件
QString htmlFilePath = "index.html";
QUrl url = QUrl::fromLocalFile(htmlFilePath);
QWebEnginePage page;
view.setPage(&page); // 添加 QWebEnginePage 并将其设置为 QWebEngineView 的页面
view.page()->load(url); // 使用 QWebEnginePage 对象重新加载页面
  1. 在 pro 文件中添加 QT += webenginewidgets,然后重新构建项目。

  2. 确保在目标机器上已安装必要的库文件。如果您使用的是 Qt 5.x,请安装 Qt WebEngine 模块的运行时库。如果您使用的是 Qt 6.x,请安装 Qt WebEngine 模块的完整安装程序。

希望这些解决方案可以解决您的问题。
如果我的回答解决了您的问题,请采纳!

以下内容引用CHATGPT:

首先需要检查一下本地的html文件是否存在,是否路径正确。如果路径正确,可以尝试在加载时设置一下缓存模式,例如:

view.page()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true);
view.page()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true);
view.page()->settings()->setMaximumCacheSize(0);
view.page()->settings()->setObjectCacheCapacities(0, 0, 0);
view.page()->settings()->setHttpCacheMaximumSize(0);
view.page()->settings()->setOfflineStorageDefaultQuota(0);
view.page()->settings()->setOfflineWebApplicationCacheQuota(0);
view.page()->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
view.page()->settings()->setAttribute(QWebEngineSettings::PluginsEnabled, true);
view.page()->settings()->setAttribute(QWebEngineSettings::ScreenCaptureEnabled, true);
view.page()->settings()->setAttribute(QWebEngineSettings::WebGLEnabled, true);
view.page()->settings()->setAttribute(QWebEngineSettings::Accelerated2dCanvasEnabled, true);
view.page()->settings()->setAttribute(QWebEngineSettings::WebGLEnabled, true);
view.page()->settings()->setAttribute(QWebEngineSettings::WebRTCPublicInterfacesOnly, true);
view.page()->settings()->setAttribute(QWebEngineSettings::FullScreenSupportEnabled, true);
view.page()->settings()->setAttribute(QWebEngineSettings::ScrollAnimatorEnabled, true);
view.page()->settings()->setAttribute(QWebEngineSettings::TouchIconsEnabled, true);
view.page()->settings()->setAttribute(QWebEngineSettings::AllowRunningInsecureContent, true);
view.page()->settings()->setAttribute(QWebEngineSettings::AllowGeolocationOnInsecureOrigins, true);
view.page()->settings()->setAttribute(QWebEngineSettings::AllowWindowActivationFromJavaScript, true);
view.page()->settings()->setAttribute(QWebEngineSettings::AllowWebAudio, true);
view.page()->settings()->setAttribute(QWebEngineSettings::AllowMediaStreamRecording, true);
view.page()->settings()->setAttribute(QWebEngineSettings::AllowWebGL2, true);
view.page()->settings()->setAttribute(QWebEngineSettings::AllowRunningInsecureContent, true);

如果还是无法加载,可以尝试在程序中添加一些调试信息,例如:

view.page()->setDevToolsPage(view.page());
view.page()->setView(view);
view.show();

这样可以打开开发者工具,查看错误信息。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

根据你提供的代码和运行日志,可以看出程序使用了 Qt WebEngine 来加载本地的 HTML 文件。出现白屏的原因可能有以下几点:

HTML 文件路径错误:请检查 HTML 文件的路径是否正确,确保程序可以正确地找到文件。

HTML 文件内容错误:请检查 HTML 文件的内容是否正确,确保没有语法错误和标签不闭合等问题。

Qt WebEngine 版本问题:请确保你的 Qt 版本和 Qt WebEngine 版本相匹配,否则可能会出现兼容性问题。

Qt WebEngine 配置问题:请确保你的程序正确设置了 Qt WebEngine 的相关参数,如启用 GPU 渲染等。

硬件或驱动问题:请确保你的硬件和驱动都能支持 Qt WebEngine 的要求,如 OpenGL 版本等。

解决方法:

检查 HTML 文件路径是否正确。

检查 HTML 文件内容是否正确。

检查 Qt 版本和 Qt WebEngine 版本是否匹配。

检查 Qt WebEngine 的相关参数是否正确设置。

检查硬件和驱动是否支持 Qt WebEngine 的要求。

如果以上方法都不能解决问题,可以尝试使用其他的浏览器内核,如 Chromium 内核,或者使用其他的方式加载 HTML 文件。