《QDebug 2025年11月》

一、Qt Widgets 问题交流

1.QWebEngineView缓存问题

测试版本:Qt5.15.2+MSVC2019 32bit

QWebEngine的缓存有点邪门,直接设置NoCache是没有效果的,目前测试可用的两种设置:

a.使用缓存,可以指定缓存目录:

复制代码
    QWebEngineProfile *profile = page->profile();
    profile->setHttpCacheType(QWebEngineProfile::DiskHttpCache);
    profile->setPersistentCookiesPolicy(QWebEngineProfile::AllowPersistentCookies);
    profile->setCachePath(qApp->applicationDirPath() + "/web/cache");
    profile->setPersistentStoragePath(qApp->applicationDirPath() + "/web/storage");

b.不使用缓存,new一个不带name构造参数的profile:

cpp 复制代码
    QWebEngineProfile *profile = new QWebEngineProfile(this);
    QWebEnginePage *page = new QWebEnginePage(profile, ui->webView);
    ui->webView->setPage(page);

使用缓存时,遇到个问题就是打开多次exe访问某个网页时,后面打开的webview加载这个网页会卡一会儿,不过我没法调试这个页面,不知道是网页读写配置文件导致卡还是WebGL导致的。同一个进程中多个webview使用同一个profile是正常的。

2.QWebEngineView渲染问题

测试版本:Qt5.15.2+MSVC2019 32bit

默认的AA_UseDesktopOpenGL渲染,在部分电脑会遇到显示空白渲染不出来,还会遇到异常崩溃

使用AA_UseSoftwareOpenGL,界面上WebGL渲染的内容没加载出来

使用AA_UseOpenGLES的兼容性比另外两个好那么一丢丢

3.QSlider和QScrollBar的鼠标滚动

QSlider默认是上大下小,左小右大,鼠标往上滚是数值加大

QScrollBar默认是上小下大,左小右大,鼠标往上滚是数值减小

修改invertedControls属性会使滚动行为反过来,ScrollBar默认是true,设置false后鼠标往上滚数值会增大

修改invertedAppearance属性会使最大和最小的位置反过来,如原本上大下小的变成上小下大

当焦点在slider上时,通过pageup、pagedown按钮或者点击到滚动栏上移动的数值为pageStep,通过左右方向键按钮移动的数值为singleStep

对于滚动时增减计算,网友总结:

注意:在windows 系统中,鼠标移动到slider 上使用滚轮操作时的默认步长是 min(3*singleStep, pageStep), 但Mac 系统下貌似只是 3*singleStep,qt 源码中通过宏 Q_WS_MAC 来区分两段代码。

https://blog.csdn.net/perry_xiao/article/details/42192441

这也是为什么命名singleStep是1,pageStep是10,滚动一下却加减了3

看了下源码,这个3的系数是通过WheelScrollLines Hint预定义的,默认是3,在Windows上也是通过获取系统的滚动行数来获取的:

复制代码
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)

对于鼠标滚动方向,我们也可以拦截wheelEvent给他取反:

cpp 复制代码
bool MyDialog::eventFilter(QObject *target, QEvent *evt)
{
    if (target && evt && evt->type() == QEvent::Wheel) {
        QWheelEvent *wheel = static_cast<QWheelEvent *>(evt);
        wheel->accept();
        QWheelEvent reversed(
            wheel->position(),
            wheel->globalPosition(),
            -wheel->pixelDelta(),
            -wheel->angleDelta(),
            wheel->buttons(),
            wheel->modifiers(),
            wheel->phase(),
            wheel->inverted(),
            wheel->source()
            );
        target->event(&reversed);
        return true;
    }
    return QDialog::eventFilter(target, evt);
}

二、Qt Quick 问题交流

1.

三、其他

1.QWindowKit无边框带WebView或者OpenGLWidget时,Win7标题栏显示错位

测试版本Qt5.15.2+MSVC2019 32bit+QWindowKit 2025年11月22日版本

使用QWindowKit库实现无边框,界面中使用到WebView,放到Windows7电脑后标题栏显示异常,界面被挤下去一点,但是点击效果还是在原位置触发:

如果是在虚拟机运行Win7渲染是正常的,库作者的回复是:OpenGL会触发这种错位问题,虚拟机里没问题是因为虚拟机里走的软件渲染。

经过测试,设置成AA_UseOpenGLES就没有错位问题。

相关推荐
luoyayun3611 小时前
Qt/QML + FFmpeg 实现多音频文件顺序拼接功能
qt·ffmpeg·音频拼接
Strugglingler3 小时前
【Qt,OpenGL, RHI,Wayland 等概念梳理】
qt·opengl·wayland·rhi·x11·egl·glx
小短腿的代码世界6 小时前
Qt对象树析构链与智能指针协同:零泄漏内存管理架构
开发语言·qt·架构
小庞在加油7 小时前
从qmake到CMake+VSCode:Qt项目现代化迁移与AI提效实战指南
vscode·qt·ai·ai工具
小短腿的代码世界8 小时前
Qt定时器高精度架构:从QTimer源码到纳秒级定时调度
数据库·qt·架构
尘中远8 小时前
Qt高性能绘图库QIm——实现二维三维科学绘图
开发语言·qt·信息可视化
人还是要有梦想的11 小时前
QT qml布局讲解
qt·布局·qml
小短腿的代码世界11 小时前
Qt交易系统审计日志与合规追踪引擎:从零构建金融级不可篡改日志架构
qt·金融·架构
sycmancia11 小时前
Qt——自定义模型类
开发语言·qt
郝学胜-神的一滴12 小时前
Qt 高级开发 031:QListWidget图标布局实战
开发语言·c++·qt·程序人生·软件构建·用户界面