我想从我在Linux中运行的Qt应用程序运行命令行程序gphoto2,并读取输出到标准输出和标准错误的结果。这个概念验证程序中的GUI是一个单独的按钮和一个标签,用于显示标准错误和标准输出的输出。Qt QProcess :: finished()信号没有这样的插槽
我无法将QtProcess :: Finished信号连接到正确的插槽。我从头文件,连接语句和函数中的Finished()信号文档复制了参数列表。函数名称以MainWindow :: class标识符为前缀。我已经用尽了一切,我希望StackOverflow中的某个人能够指出问题所在。
The Header file:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QString>
#include <QProcess>
#include <QObject>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void reply2();
private slots:
void on_pushButton_clicked();
void on_cameraControlExit(int exitCode, QProcess::ExitStatus exitStatus);
private:
Ui::MainWindow *ui;
QProcess* cameraControl;
};
#endif // MAINWINDOW_H
的mainwindow.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QProcess>
#include <QShortcut>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
cameraControl = new QProcess(this);
}
MainWindow::~MainWindow()
{
delete ui;
cameraControl->close();
delete cameraControl;
}
void MainWindow::on_pushButton_clicked()
{
// connect the camera control finished signal to the slot that will read the exit code and
// place the std output string from the process into a label on the form
connect(cameraControl, SIGNAL(finished(int , QProcess::ExitStatus)),
this, SLOT(MainWindow::on_cameraControlExit(int exitCode, QProcess::ExitStatus exitStatus)));
// Disable the ui button do we don't get double presses
ui->pushButton->setDisabled(true);
// setup the gphoto2 arguments list
QStringList args;
args.append("--capture-image-and-download");
// start the camera control
cameraControl->start("gphoto2",args);
// // wait for the process to finish or 30 seconds whichever comes first
cameraControl->waitForFinished(30000);
}
void MainWindow::on_cameraControlExit(int exitCode, QProcess::ExitStatus exitStatus)
{
qDebug() << cameraControl->errorString();
qDebug() << cameraControl->readAllStandardError();
qDebug() << cameraControl->readAllStandardOutput();
ui->pushButton->setEnabled(true);
}
完美。只要stackOverflow允许,我会尽快给出答案。感谢您及时的回复! – DarwinIcesurfer
此外,您可能想要重命名您的插槽on_cameraControlExit并删除on_前缀。为什么我说这是Qt可能会警告说,如果您使用该前缀命名您的插槽,它将无法自动连接插槽。 on_pushButton_clicked是很好的,因为它可以自动将它连接到你的pushButton。 – drescherjm
谢谢。建议已实施。 – DarwinIcesurfer