图像通常是解释某事的最简单方法,这是我遇到的问题的一个小屏幕截图:
如果您查看窗口的右侧,您可以看到内容大小的调整有明显的滞后/延迟。这是一个在很多应用程序中都会发生的问题,但我想知道是否有办法在 Qt 应用程序中使用QQuickView
和 QML 内容。
基本上我的应用程序是这样创建的:
QQuickView view;
view.resize(400, 200);
view.setResizeMode(QQuickView::ResizeMode::SizeRootObjectToView);
view.setSource(...);
QML 的内容只是一个带有 2 个矩形的项目,用于突出显示问题。
Edit:这是 QML 文件的简化版本(是的,简化版本也遇到同样的问题;p)
import QtQuick 2.12
Item {
Rectangle {
color: "black"
anchors { fill: parent; margins: 10 }
}
}
Edit2:通过以下方式运行这个小 QML 片段qmlscene
可执行文件也显示出相同的延迟/滞后。
Edit3:同样的问题发生在某些 Linux 发行版上,但在其他发行版上则不然:在我的 Ubuntu 上它工作正常,但在我的 CentOS 7 上显示与 Windows 上相同的延迟/故障。两个 Qt 版本都是 5.12.3。在旧的 OSX 上它工作得很好(在 Qt 5.9 上测试)我现在真的迷路了 ^^
有什么办法可以防止这种延迟吗?该解决方案可能是特定于平台的,因为问题似乎来自于在 Qt 有可能获取事件之前调整本机帧大小的事实,因此内容会以 1 帧延迟调整大小......但我会想知道是否有人知道如何处理这个问题?
任何帮助或指示表示赞赏:)
问候,
达米安
正如您在更新中提到的 - 内容大小调整时有 1 帧延迟。
有一个非常简单的技巧可以解决这个问题。
使用nativeEventFilter,处理
WM_NCCALCSIZE 与 pMsg->wParam == TRUE 并从顶部或底部删除 1px。
if( pMsg->message == WM_NCCALCSIZE and pMsg->wParam == TRUE )
{
LPNCCALCSIZE_PARAMS szr = NULL;
szr = reinterpret_cast<LPNCCALCSIZE_PARAMS>( pMsg->lParam );
if( szr->rgrc[0].top != 0 )
{
szr->rgrc[0].top -= 1;
}
}
问候,安东
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)