如何从另一个应用程序读取QTextEdit内容

How to read QTextEdit content from another application?

本文关键字:读取 QTextEdit 内容 应用程序 另一个      更新时间:2023-10-16

我目前正在尝试制作一个调试工具,它将位于专有应用程序(通过BLE与硬件接口)之上。

在这个应用程序里面(用QT写的)有一个文本框,它有来自硬件的日志信息流,我想做一个应用程序,它将监视该文本框并处理被记录的数据。

我打开spy++,找到了我需要的窗口的句柄,然而,它只显示为"QWidget"和WM_GETTEXT没有提取任何数据。这两个链接还提到QT小部件不能被标准的Win32 API读取(这对我来说很奇怪,因为我确信所有东西都需要通过Windows GUI层):https://forum.qt.io/topic/36867/accessing-qtextedit-from-another-program/9https://forum.qt.io/topic/19256/how-get-handle-of-qwidget-child-with-vb-net/9

我愿意接受任何选择!在这一点上我是语言不可知论者。我如何读取QTextEdit日志数据?

Qt的小部件支持辅助技术 (AT)开箱即用。在Windows上,Qt的可访问性可以通过MSAA和IAccessible2获得。两者都能够检查小部件树,并跨进程边界交付小部件的属性。

两种接口均为Qt官方支持

您无法读取QTextEdit的内容,因为它是一个外来小部件。您可以在QWidget文档中阅读更多内容:

在Qt 4.4中引入,外来小部件是不为窗口系统。它们没有关联的本机窗口句柄和他们在一起。这个功能大大加快了小部件的绘制速度,调整大小,并删除闪烁。

如果您需要本机窗口的旧行为,您可以选择以下选项之一:

  1. 在您的环境中使用QT_USE_NATIVE_WINDOWS=1

  2. 在应用程序上设置Qt::AA_NativeWindows属性。所有

  3. 在widgets上设置Qt::WA_NativeWindow属性:widget本身所有的祖先都将成为本地的(除非Qt::WA_DontCreateNativeAncestors设置).

  4. 调用QWidget::winId强制本地窗口(这意味着3)。

  5. 设置Qt::WA_PaintOnScreen属性以强制使用本机窗口


还有一个可能对你有用的Qt自省工具:GammaRay。我个人没有使用它——只是读了一个小概述,但它看起来很有前途。