《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就没有错位问题。

相关推荐
Larry_Yanan9 小时前
Qt网络开发之基于 QWebEngine 实现简易内嵌浏览器
linux·开发语言·网络·c++·笔记·qt·学习
一然明月11 小时前
Qt QML 锚定(Anchors)全解析
java·数据库·qt
一只爱学习的小鱼儿11 小时前
使用QT编写粒子显示热力图效果
开发语言·qt
大树学长11 小时前
【QT开发】Redis通信相关(一)
redis·qt
笨笨马甲11 小时前
Qt 人脸识别
开发语言·qt
山上三树12 小时前
Qt QObject介绍
开发语言·qt
山上三树12 小时前
QObject、QWidget、Widget三者的关系
qt
坚定学代码13 小时前
qt c++ 局域网聊天小工具
c++·qt·个人开发
笨笨马甲14 小时前
Qt network开发
开发语言·qt
mengzhi啊1 天前
Qt Designer UI 界面 拖的两个 QLineEdit,想按 Tab 从第一个跳到第二个
qt