Qt应用中QWebEngineView渲染网页无显示问题求助
Qt5.12.12 + Ubuntu22.04下WebEngine网页无法渲染排查方案
我参考Qt WebEngineWidgets模块文档编写了代码,使用Qt 5.12.12版本,在Ubuntu 22.04.4 LTS系统下通过CMake构建项目。代码编译无报错,但网页无法渲染,以下是我的代码和CMakeLists.txt配置:
代码文件
#include <QApplication> #include <QThread> #include <QDialogButtonBox> #include <QPushButton> #include <QLabel> #include <QHBoxLayout> #include <QWebEngineView> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWebEngineView view; view.load(QUrl(QString("https://qt-project.org/"))); view.resize(1024, 750); view.show(); return a.exec(); }
CMakeLists.txt配置
cmake_minimum_required(VERSION 3.1.0) set(CMAKE_BUILD_TYPE Release) add_definitions(-fPIC) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_VERBOSE_MAKEFILE ON) list(APPEND CMAKE_PREFIX_PATH "/home/Qt5.12.12/5.12.12/gcc_64") set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) find_package(Qt5 COMPONENTS Gui Core Widgets WebEngineWidgets PrintSupport REQUIRED) include_directories( ./inc ) add_executable(browser src/app_main.cpp ) target_link_libraries(browser Qt5::Gui Qt5::Widgets Qt5::PrintSupport Qt5::WebEngineWidgets )
排查方案
1. 补全系统依赖
Ubuntu22.04的glibc版本高于Qt5.12.12的编译环境,WebEngine运行需要额外依赖库,执行以下命令安装:
sudo apt install libnss3 libx11-xcb1 libxcb-dri3-0 libdrm2 libgbm1 libasound2
2. 关闭WebEngine沙箱
旧版Qt WebEngine在新系统中可能因沙箱权限限制无法启动渲染进程,可通过两种方式关闭:
- 运行程序时添加参数:
./browser --no-sandbox - 在代码中初始化QApplication前设置环境变量:
int main(int argc, char *argv[]) { qputenv("QTWEBENGINE_DISABLE_SANDBOX", "1"); // 添加这行 QApplication a(argc, argv); QWebEngineView view; view.load(QUrl(QString("https://qt-project.org/"))); view.resize(1024, 750); view.show(); return a.exec(); }
3. 确保Qt库路径正确
运行程序时需让系统找到Qt的库文件,可临时设置环境变量:
export LD_LIBRARY_PATH=/home/Qt5.12.12/5.12.12/gcc_64/lib:$LD_LIBRARY_PATH ./browser
或者在CMakeLists.txt中添加RPATH配置,编译后无需手动设置:
# 在add_executable之后添加 set_target_properties(browser PROPERTIES INSTALL_RPATH "/home/Qt5.12.12/5.12.12/gcc_64/lib" BUILD_WITH_INSTALL_RPATH ON )
4. 测试本地页面排除网络问题
加载本地HTML文件测试是否能正常渲染,排除网络访问问题:
view.load(QUrl("file:///home/your-user/test.html")); // 替换为实际本地HTML路径
内容的提问来源于stack exchange,提问作者sushant singh sikarwar
相关产品推荐
相关产品推荐

