概述:使用 QWebEngineView 时窗体不显示或半透明的问题解决。
问题描述
使用 QWebEngineView 控件后,如果父窗体设置了以下属性,会导致窗口不显示或半透明:
setWindowFlags(Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground);解决方案
方法一:不使用透明背景属性
setWindowFlags(Qt::FramelessWindowHint);
// 注释掉透明背景属性
// setAttribute(Qt::WA_TranslucentBackground);方法二:设置 OpenGL 环境
在 main.cpp 中设置:
int main(int argc, char *argv[])
{
// 使用 Angle 后端
qputenv("QT_OPENGL", "angle");
// 或禁用沙箱
qputenv("QT_WEBENGINE_DISABLE_SANDBOX", "1");
QApplication a(argc, argv);
// ...
}方法三:设置 QWebEngineView 属性
QWebEngineView *webView = new QWebEngineView(this);
// 设置原生窗口属性
webView->setAttribute(Qt::WA_DontCreateNativeAncestors);
webView->setAttribute(Qt::WA_NativeWindow);方法四:使用 QGraphicsView 替代
QGraphicsScene *scene = new QGraphicsScene(this);
QGraphicsView *view = new QGraphicsView(scene);
QWebEngineView *webView = new QWebEngineView();
QGraphicsProxyWidget *proxy = scene->addWidget(webView);完整示例
#include <QApplication>
#include <QWebEngineView>
#include <QWidget>
class BrowserWindow : public QWidget
{
public:
BrowserWindow(QWidget *parent = nullptr) : QWidget(parent)
{
// 设置无边框
setWindowFlags(Qt::FramelessWindowHint);
// 不设置透明背景
// setAttribute(Qt::WA_TranslucentBackground);
// 创建 WebEngineView
m_webView = new QWebEngineView(this);
m_webView->setAttribute(Qt::WA_NativeWindow);
// 设置布局
QVBoxLayout *layout = new QVBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(m_webView);
// 加载页面
m_webView->load(QUrl("https://www.baidu.com"));
}
private:
QWebEngineView *m_webView;
};相关链接
更新时间: 2026-03-27