C++/Qt:在C++和Qt GUI之间传递变量,无需C++部分(包括Qt库)

C++/Qt: Pass variables between C++ and Qt GUI without the C++ part including the Qt library

本文关键字:C++ Qt 无需 部分 包括 变量 之间 GUI      更新时间:2023-10-16

已关闭:

感谢大家的想法,将尝试使用您提供的建议,以便解决我的问题!

问题:

"C++ main"(不能#include QObject或任何Qt库)获取数据,处理数据并将其传递到单独的Qt进程(在这种情况下为Qt GUI)。

数据在Qt GUI中可视化并提供反馈,例如,您可以将命令发送到"C++主"(如启动/停止测量)。

以最佳油漆质量可视化问题。

问题:

"C++ main"是否有任何可能的方法可以从Qt GUI获得反馈,而无需以任何方式将Qt包含在"C++ main"中?("C++主"运行在无法处理/加载Qt库的I/O卡上。

提前感谢您的有用答案!

如果没有太多关于"C++ main"中发生的事情的代码,很难回答。但是,如果您的类具有在 main 中创建然后用于 IO 的正确接口,则可以执行以下操作:

class MyIoHandler {
public:
    enum Command {START, STOP};
    MyIoHandler() {}
    void command(Command command) { d_command = command; } // Set the command
    void getData(MyData& data) { data = d_data; } // Do a deep copy
private:
    void run() 
    {
        while(d_command == START) {
            readDataFromIO();
            d_data = data;
        }
    }
    Command d_command;
    MyData d_data;
};

然后,GUI 只需要在类上调用正确的函数即可与 IO 处理程序进行交互。主类不需要知道 GUI 的外观,但 GUI 必须知道类的外观。

这也是基于它们在同一个可执行文件中(来自注释)

你只需要注意线程等。

但如前所述,如果没有一些结构或代码示例,很难给出有用的答案。

我通常使用QUdpSocket(在Qt世界中)与我的其他应用程序(有效地用于IPC)进行通信。然后你的c ++世界你可以使用普通的套接字sys/socket.h来完成同样的工作。由于您的通信很简单 - 即消息传递很容易做到。创建 c++/Qt 类来处理您的 UDP 需要付出一些努力,但从那时起它真的很容易。

对我来说,主要缺点是两个程序必须就要使用的端口达成一致(IP 地址将是环回地址 127.0.0.1)。所以你可能有一个配置文件,或者一个命令行参数来设置这个......