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

可能是因为本地 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大模型与博主波罗歌共同编写:
根据您提供的代码和日志,可以尝试以下几个解决方案:
// 加载本地 HTML 文件
QString htmlFilePath = "index.html";
QUrl url = QUrl::fromLocalFile(htmlFilePath);
QWebEnginePage page;
view.setPage(&page); // 添加 QWebEnginePage 并将其设置为 QWebEngineView 的页面
view.page()->load(url); // 使用 QWebEnginePage 对象重新加载页面
在 pro 文件中添加 QT += webenginewidgets,然后重新构建项目。
确保在目标机器上已安装必要的库文件。如果您使用的是 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 文件。