你需要連接信號從對象從庫開始你的主類對象。
圖書館
process.h
#include <QtCore/qglobal.h>
#include <QObject>
#include <QProcess>
#if defined(PROCESS_LIBRARY)
# define PROCESSSHARED_EXPORT Q_DECL_EXPORT
#else
# define PROCESSSHARED_EXPORT Q_DECL_IMPORT
#endif
class PROCESSSHARED_EXPORT Process : public QObject
{
Q_OBJECT
public:
Process(const QString &p_Command, QObject *p_Parent = nullptr);
QString getCommand() const;
signals:
void readyRead(QByteArray);
public slots:
void runCommand(const QString &p_Command);
void runCommand();
void setCommand(const QString &p_Command);
private slots:
void out();
void processFinished(int p_Code);
private:
QString command;
};
process.cpp
#include "process.h"
Process::Process(const QString &p_Command, QObject *p_Parent)
: QObject(p_Parent)
{
command = p_Command;
}
void Process::runCommand(const QString &p_Command) {
command = p_Command;
runCommand();
}
void Process::runCommand() {
QProcess *console = new QProcess(this);
console->connect(console, SIGNAL(readyRead()),
this, SLOT(out()));
console->connect(console, SIGNAL(finished(int)),
this, SLOT(processFinished(int)));
console->start(command);
}
void Process::out() {
QProcess *console = qobject_cast<QProcess*>(QObject::sender());
QByteArray processOutput = console->readAll();
emit readyRead(processOutput);
}
void Process::processFinished(int p_Code) {
QProcess *console = qobject_cast<QProcess*>(QObject::sender());
QByteArray processOutput = console->readAll()
+ QString("Finished with code %1").arg(p_Code).toLatin1();
emit readyRead(processOutput);
}
QString Process::getCommand() const {
return command;
}
void Process::setCommand(const QString &p_Command) {
command = p_Command;
}
用法
void MainWindow::showCustomMessage()
{
Process *tempProcess = new Process("ping google.com", this);
connect(tempProcess, SIGNAL(readyRead(QByteArray)),
this, SLOT(processResponded(QByteArray)));
tempProcess->runCommand();
}
void MainWindow::processResponded(QByteArray p_Data) {
qDebug() << p_Data;
}
如果有人有關於Qt中創建庫的問題 - 訪根據[文件](HTTP官方Wiki
_dir_命令不會與'QProcess'工作://doc.qt。 io/qt-5/qprocess.html#notes-for-windows-users) –
「以下代碼不起作用」不工作**如何**?您必須檢查錯誤條件並提供一些調試輸出以讓您知道發生了什麼。一旦你這樣做了,問題就會變得明顯。 –
@AlexanderSorokin我可以使用'cmd.exe/c'技術。不過,那只是我的例子。我實際上是在Mac上運行它,建立一個第三方工具的前端,不幸的是它只能用命令行格式。 – Volomike