Как программа должна запускаться в дочернем QProcess, отправлять целочисленное сообщение родительскому объекту, который содержит QProcess (когда может быть группа объектов)? - PullRequest
0 голосов
/ 04 мая 2019

У меня есть графический интерфейс, который содержит множество StationWidget, внутри каждого StationWidget есть дочерний процесс.

class StationWidget : public QWidget
{
    Q_OBJECT
public:

    explicit StationWidget(int index, int width, int height, const QPixmap& pixmap, QWidget* parent = nullptr);

    void startProcess(const QString& program, const QStringList& arguments);

    void killProcess();

protected:
    void paintEvent(QPaintEvent* event) override;

private slots:
    void onChildProcessSignal();

private:
    // ...

    QProcess* process;
};

Процесс запускает отдельную программу, чтобы упростить вопрос, давайтескажем, он мог бы отправить одно целое число (4 байта) в StationWidget в любое время.

После получения сообщения StationWidget повторно отображает себя другим сообщением.

Так что мойвопрос в том, какие методы мне следует использовать для реализации трансляции сообщений ( программа, запущенная в дочернем процессе, отправляет целое число родительскому объекту, который содержит процесс, и сообщение может быть отправлено в любое время, и может быть кучаобъектов )?

Я пытался, чтобы каждая программа, запускаемая дочерними процессами, записывала в stdout и родительский объект

// in parent object ctor
connect(process, &QProcess::readyReadStandardOutput, this, &StationWidget::onChildProcessSignal);


void StationWidget::onChildProcessSignal()
{
    auto byteData = process->readAllStandardOutput();
    // if fail, return 0
    int signalType = byteData.toInt();
    // change the plot status

    // ...

}

, но это тоже не могло помочь,родительский объект всегда терпит неудачу, когда извлекает целое число.И мне также интересно, действительно ли допустимо, чтобы несколько процессов записывали в один и тот же stdout.

Интересно, может ли помочь методика в Как сообщать приложения Qt двухсторонним , если это так?, как?

...