一、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 来区分两段代码。
这也是为什么命名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就没有错位问题。