【问题标题】:C++/Qt: Pass variables between C++ and Qt GUI without the C++ part including the Qt libraryC++/Qt:在 C++ 和 Qt GUI 之间传递变量,没有 C++ 部分,包括 Qt 库
【发布时间】:2016-04-26 02:21:45
【问题描述】:

关闭:

感谢大家的想法,将尝试与您提供的建议一起解决我的问题!

问题:

“C++ main”(不能 #include QObject 或任何 Qt 库)获取数据、处理数据并将其传递到单独的 Qt 进程(在本例中为 Qt GUI)。

数据在 Qt GUI 中可视化并提供反馈,例如您可以将命令发送到“C++ main”(如 START/STOP MEASUREMENT)。

Visualization of the problem in best paint quality.

问题:

“C++ main”是否有任何可能的方式从 Qt GUIWITHOUT 获得反馈,包括“C++ main”中的 Qt? (“C++ main”在无法处理/加载 Qt 库的 I/O 卡上运行。)

提前感谢您提供有用的答案!

【问题讨论】:

  • 那么命令界面和gui实际上是独立的程序,你想以某种方式进行通信?
  • 不知何故。实际上,GUI 依赖于 MAIN,但 MAIN 不依赖于 GUI(MAIN 应该在没有 GUI 的情况下运行)。
  • 1.这是 Qt - 不是 QT。 2. 它是一个进程(不是文件) 3. 哪个操作系统?可以使用共享内存吗?您可以使用基于文件的通信吗?双方如何实现拉动机制?
  • 使用的操作系统是Windows 7,可以进行基于文件的通信,但不方便。 I/O 方面相当无趣,只关注 C++ 需要从 Qt GUI 获取某种数据/信息的部分,而不包括 Qt 本身。想到了队列和某种虚函数,但我不知道这是否有意义。

标签: c++ qt user-interface parameter-passing


【解决方案1】:

没有太多关于“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 必须知道类的外观。

这也是假设它们在同一个可执行文件中(来自 cmets)和

您只需要注意线程等。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      相关资源
      最近更新 更多