我需要将一个QProcess连接到一个错误处理程序,但我不知道如何将错误字符串传递给插槽。下面的内容编译,但不起作用。
QString MainWindow::RunProcess(QString cstring)
{
QProcess *process = new QProcess(this);
connect(process,SIGNAL(readyReadStandardError()),this,SLOT( adberror(process::ReadAllStandardError() ) ))
process->start(cstring);
}
void MainWindow::adberror(QString errtxt)
{
qDebug() << "error handler";
qDebug() << errtxt;
}我可以引发一个进程错误,但是adberror()永远不会触发。
运行时,我在应用程序输出窗格中看到:
QObject::connect: No such slot MainWindow::adberror(process::ReadAllStandardError() )
QObject::connect: (receiver name: 'MainWindow')编辑:这是QT5.6。我做了一次新的清洁。
发布于 2016-11-23 20:54:34
你有两个选择
1-在读取输出之前等待
QString MainWindow::RunProcess(QString cstring)
{
QProcess process;
process.start(cstring);
process.waitForFinished();
QString str = process.readAllStandardOutput();
}2-使process成为一个成员变量,并从adberror中移除第一个参数。所以,
在RunProcess中
connect(process,SIGNAL(readyReadStandardError()),this,SLOT(adberror()))然后在adberror
QString str = process->readAllStandardOutput();请注意,在您的代码中,您有一个问题,因为您的信号和插槽args不匹配。而且,ReadAllStandardError也不会做好任何准备!
编辑:第二个解决方案的更多代码
mainwindow.h
class MainWindow
{
private://methods
void adberror();
private://attributes
QProcess* process;
};mainwindow.cpp
QString MainWindow::RunProcess(QString cstring)
{
process = new QProcess(this);
connect(process,SIGNAL(readyReadStandardError()),this,SLOT(adberror()));
connect(process, SIGNAL(finished(int)), process, SLOT(deleteLater()));
process->start(cstring);
}
void MainWindow::adberror()
{
QString str = process->readAllStandardOutput();
qDebug() << str;
}发布于 2016-11-23 20:52:08
要处理readyReadStandardError()信号,您应该将插槽定义为:
private slots:
void adberror();并使用它:
connect(process,SIGNAL(readyReadStandardError()),this,SLOT( adberror() ));也就是没有争论。将子进程保留为MainWindow类的字段,以便在数据可用时读取数据。
https://stackoverflow.com/questions/40773286
复制相似问题