16,802
社区成员




m_iQProcess.start(qApp->arguments().first(), QStringList());
这里是启动程序自身的意思..这里用一个程序模拟了你提到的两个程序.
你说的循环获取标准输出,就是这代码了.
connect(&m_iQProcess, SIGNAL(readyReadStandardOutput()),
this, SLOT(ReadOutput()));
m_iQProcess启动了程序x.那么x一有标准输出,m_iQProcess就会发出信号readyReadStandardOutput(),信号和槽绑定了,
所以一有标准输出,函数ReadOutput()就会被调用.在ReadOutput()内就可以获取标准输出信息.
#include "widget.h"
#include "ui_widget.h"
#include <QApplication>
#include <QLineEdit>
#include <QDebug>
#include <stdio.h>
#include <iostream>
#include <QMessageBox>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget),
m_iQProcess()
{
ui->setupUi(this);
connect(&m_iQProcess, SIGNAL(readyReadStandardOutput()),
this, SLOT(ReadOutput()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::ReadOutput()
{
QByteArray ba = m_iQProcess.readAllStandardOutput();
qDebug() << ba;
QMessageBox::information(this, "", ba);
}
void Widget::on_pushButton_clicked()
{
m_iQProcess.start(qApp->arguments().first(), QStringList());
}
void Widget::on_pushButton_2_clicked()
{
printf("ddddddd");
std::cout << "aaa";
fflush(stdout);
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QProcess>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
public slots:
void ReadOutput();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::Widget *ui;
QProcess m_iQProcess;
};
#endif // WIDGET_H
界面上面的两个按钮,先点第一个按钮启动一个程序(b). 再点(b)的第二个按钮输出,第一个程序就可以收到了..