Qt 将信号从 Item 传递到容器

Qt Passing signal from Item to a container

我有一个指向类型 X 的指针的 QVector,它的项目,即 X 自己的 QProcesses。这些进程可以在任意时间终止。现在,当一个进程结束时,我已经在 class X 内部构建了信号槽连接。但是,我想将它传播到处理程序 class ,该处理程序具有 X* 的 QVector 作为成员。这样做的优雅方式是什么?

您可以将信号连接到信号,将源信号隐藏为实现细节:

class MyInterface : public QObject {
  Q_OBJECT
  ...
  QProcess m_process;
public:
  Q_SIGNAL void processEnded();
  MyInterface(QObject * parent = 0) : QObject(parent) {
    connect(&QProcess, &QProcess::finished, this, &MyInterface::processEnded);
    ...
  }
};

处理程序 class 可以侦听这些信号并对其进行处理。

class Handler : public QObject {
  Q_OBJECT
  QVector<MyInterface*> m_ifaces; // owned by QObject, not by the vector
  void addInterface(MyInterface* ifc) {
    ifc->setParent(this);
    connect(ifc, &MyInterface::processEnded, this, [this, ifc]{
      processEnded(ifc); 
    });
    m_ifaces.append(ifc);
  }
  void processEnded(MyInterface* ifc) {
    // handle the ending of a process
    ...
  }
  ...
};