【问题标题】:Calling a QT Button (C++) From the External Python Script [closed]从外部 Python 脚本调用 QT 按钮(C++)[关闭]
【发布时间】:2021-12-23 02:21:23
【问题描述】:

我正在开发一个主要使用 Python 编写的项目,但正在处理相机捕获的部分是在 QT 项目 (C++) 中。

例如: QT 中有一个start 按钮,它可以激活几个用 C++ 编写的函数:

ma​​in.qml:

Button {
    id: startbutton
    x: 910
    y: 822
    text: qsTr("Start")

    onPressed: {
        VideoStreamer.startcapturing()
    }
}

目前,我手动单击此按钮,但我需要编写一个函数,以便在 Python 算法中需要时激活此按钮。

--> 所以 Python 脚本应该以某种方式调用开始按钮。

我读过管道,但我什么都不能实现,实际上我什至不知道我应该专注于 QT 和 Python 还是 C++ 和 Python 之间的通信。

你能用上面的这些特殊代码帮我解决这个问题吗?

注意事项: 操作系统:Ubuntu 18.04.6 LTS

所有项目都在同一台电脑上。

【问题讨论】:

  • 这似乎是一个巨大的XY problem。为什么不直接将 C++ 应用程序更改为在启动时开始捕获?
  • 该算法包含一些图像处理问题,因此更像是仅在需要时才“拍摄那一刻的照片”。不像从头到尾记录一些东西。出于某些未来的原因,我也需要这种沟通。
  • 你可以看看 FrogLogic 的名为 Squish 的程序,它用于驱动 Qt GUI 应用程序的自动化测试,包括以编程方式按下它们的按钮。

标签: python c++ qt


【解决方案1】:

完整的答案完全超出了 SO 的范围,但您基本上是在问“我如何改进这个 Qt 应用程序以支持进程间通信”。

一些选项:

  • 让 Qt 应用程序监听 TCP 或 Unix 套接字上的命令。您可以自己发明一个协议(例如前面带有长度字段的简单 JSON 对象或简单的 HTTP 服务器),也可以查看已建立的 IPC 协议,例如 gRPC、Thrift 和 capnproto。
  • 让两个应用程序通过 DBus 进行通信,这非常适合简单的单向命令。

在所有情况下,您都必须改造 Qt 应用程序以在命令到达时发出适当的内部信号。

【讨论】:

  • 感谢您的回答。您可以使用第二个选项更具体吗?我在 PyQT 上看到了一些示例,但我的 qt 部分不在 python 上。你能写一个伪代码来展示如何根据我的按钮使用它吗?
  • 不,这需要我基本上了解您的整个 Qt 应用程序,而我不知道。
猜你喜欢
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
相关资源
最近更新 更多