【发布时间】:2020-09-21 15:09:01
【问题描述】:
我的 QProcess 非常简单,类似于:
#include <iostream>
#include <string>
int main() {
std::string a, b;
std::cout<<"Enter value of a: ";
std::cin>>a;
std::cout<<std::endl;
std::cout<<"Now, enter value of b: ";
std::cin>>b;
std::cout<<std::endl;
std::cout<<"Value of a is "<<a<<" and value of b is "<<b<<std::endl;
return 0;
}
请注意,我无法更改上述代码。无论流程如何,Qt 代码都应该可以工作。
据我了解,QProcess::write(const char *data) [继承自QIODevice] 将数据发送到缓冲区但不直接将其发送到标准中,除非写入通道关闭,或者进程已完成。
但是,我需要在调用QProcess::write(const char *data) 时直接将数据发送到标准,因为在第一个std::cin 之后我无法关闭通道,否则第二个std::cin 什么也得不到。所以我想向进程发送一些数据,因为它要求它[就像在命令行上运行这段代码一样],我不知道如何用 Qt 做到这一点。
另外,我不认为waitForBytesRead()会做得很好,因为它只是在将第一组数据输入缓冲区时等待,并且该过程不会继续。
QProcess相关代码:
QProcess my_proc = new QProcess();
QString program = "powershell.exe";
QStringList prog_args;
prog_args << "-Command" << "./main"
my_proc->setProcessChannelMode(QProcess::MergedChannels);
my_proc->setProgram(program);
my_proc->setArguments(prog_args);
my_proc->start();
my_proc->waitForStarted();
~程序的输出被打印在 QTextBrowser 或任何类似的小部件上。所以我知道它什么时候需要相关的输入。~
~在另一个QTextEdit qinput 或类似的,我输入了我想发送给进程的字符串,这是由:
if ( my_proc->state() == QProcess::Running) {
my_proc->write(qinput->toPlainText().toStdString().c_str());
}
~从这里开始没有任何反应,所以“现在输入 b 的值”这一行不会显示~
【问题讨论】:
-
请同时显示带有
QProcess的代码 -
也许你需要一种方法来刷新。但是 QProcess/QIODevice 没有提供。
-
@idclev463035818 如果这些位可能相关,我提供了更多代码。