我的Qt程序需要发送一个带有QProcess
的命令行并检索结果,然后将其存储在QString
中。
这是我的代码:
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QProcess p;
void sendCommand(QString command);
private slot:
void fetchResult();
// ...
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
connect(&p, SIGNAL(readyReadStandardOutput()), this, SLOT(fetchResult()));
// ...
}
void MainWindow::fetchResult()
{
QString result = p.readAllStandardOutput();
// ...
}
void MainWindow::sendCommand(QString command)
{
p.start(command);
p.waitForFinished();
}
// ...
然后我发送如下命令:sendCommand("cat " + filename);
(例如),我希望在result
中的fetchResult()
变量中得到结果。
所有内容都像一个咒语,但是...如果结果太大(〜700个字符),则会被截断。奇怪的是:变量包含我期望的字符串的 end 。
我在哪里想念东西。
答案 0 :(得分:0)
要等到执行结束,请尝试以下操作,它对我有用:
id
一样添加Slot
来接收private slots: void cmdFinished();
信号:QProcess::finished
void MainWindow::cmdFinished()
{
// process Standard Output result
fetchResult();
// process Standard Error result
//fetchErrResult(); // add it if you want to process Errors (p.readAllStandardError())
}
(取消连接到信号QProcess::finished(int)
):readyReadStandardOutput()
希望它对您有帮助。