Qt/QML Windows应用程序运行时非常慢语法应用程序



我们正在开发一个大型Qt/QML应用程序,最近遇到了一个有趣的问题:如果"语法错误",应用程序将无法使用。安装。语法上似乎使用了Windows可访问性,并试图"读取"。或者处理我们的应用程序屏幕。

如果在启动我们的应用程序之前关闭语法,一切都可以正常工作。

有没有办法在我们的应用程序中修复这个问题?我试着设置"QT_ACCESSIBILITY=0"在环境,但这并没有帮助。

我有重建Qt自己禁用这个吗?

BTW:我们正在使用Qt 5.15.2开源。

如果有人想试试这个:

语法:https://www.grammarly.com/desktop

App "Oxygen": https://ccc.dewetron.com/dl/634d2acf-ff00-457c-ae48-4e56d9c49a3c

谢谢你的回答。

当Qt发现一个可访问性客户端正在运行时,它会为这些可访问性客户端生成一个通知流。这确实会带来开销。其中一些开销可能是巨大的,因为应用程序或Qt中的数据结构需要映射到"索引对象树"。可访问性框架通常在其上操作的结构。

通过无操作处理程序禁用整个机制,您的应用程序现在不再可访问。如果语法上确实使用可访问性基础结构来访问应用程序中的数据,那么它可能也会变得不那么有用。

也许有一些事情可以在Qt中进行优化,以便启用可访问性不会导致如此高的负载。要做到这一点,请向Qt项目报告一个bug,并包括一个代表你的应用程序正在做的事情的复制器。

https://wiki.qt.io/Reporting_Bugs

我找到了一个可行的解决方案。为更新和QObject根对象安装自定义空处理程序:

void DummyUpdateHandler(QAccessibleEvent* event)
{
}
void DummyRootObjectHandler(QObject*)
{
}
void initQML(QQuickView* view)
{
#ifdef WIN32 
QAccessible::installUpdateHandler(DummyUpdateHandler);
QAccessible::installRootObjectHandler(DummyRootObjectHandler);
#endif
view->setSource(qml_file);
} 

应用程序不再因语法或其他辅助工具而减慢速度。

再见冈瑟