سلام از QThread استفاده کن
برای خط به خط هم از SIGNAL
readyRead داخل QProcess
مثلا این کلاس که من برای گرفتن پینگ نوشتم :
//ProcessThread.h
#ifndef PROCESSTHREAD_H
#define PROCESSTHREAD_H
#include <QThread>
#include <QProcess>
#include <QObject>
class ProcessThread : public QThread
{
Q_OBJECT
public:
ProcessThread()
{
proc =NULL;
}
void run()
{
if(proc ==NULL)
proc=new QProcess;
connect(proc,SIGNAL(readyRead()),this,SLOT(pingReady()));
QStringList arguments = QStringList() << "google.com";
proc->start("ping",arguments,QIODevice::ReadOnly);
proc->waitForFinished();
}
~ProcessThread()
{
delete proc;
}
signals:
void resultReady(QString);
private slots:
void pingReady()
{
if(!proc->isOpen())
return;
QString res=proc->readAllStandardOutput();
emit resultReady(res);
}
private:
QProcess *proc;
};
#endif // PROCESSTHREAD_H
اینم یک مثال از نحوه استفاده از کلاس بالا :(فرض کردم یک QTextBrower با اسم textBrower داخل فرم هست)
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "ProcessThread.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ProcessThread *thread=new ProcessThread;
QObject::connect(thread,SIGNAL(resultReady(QString)),this,SLOT(pingFinish(QString)));
thread->start();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::pingFinish(QString res)
{
ui->textBrowser->append(res);
}
ضمنا از کلاس های QABstracktSocket هم میتونی استفاده کنی و پینگ رو خودت بنویسی .