У меня есть графический интерфейс, который содержит множество 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 двухсторонним , если это так?, как?