请教一个问题
Tofloor
poster avatar
FEI17
deepin
2012-11-28 20:56
Author
我之前用expect和spawn做了一个myxrgsu的认证脚本
但是现在 我想用qt做一个他的图形前端 遇到了一些问题

我的代码是这样写的

先用
QProcess *cmd=new QProcess;
cmd->start("myxrgsu")
来启动myxrgsu

接着用 cmd->readall()来读取输出
然后connect()一下 当有输出的时候 自动加载到editline

现在问题来了 在当初写交互脚本的时候 是可以检测到myxrgsu的输并且输入代码的
但是现在用这个程序的时候 却检测不到任何输出
我想 会不会是程序本身无输出 于是写了一个bash 内容只有一句
  1. myxrgsu
Copy the Code
用它来启动myxrgsu 我想着 这个脚本既然在终端有输出 那么应该可以检测到它的输出吧
结果发现输出仍然是空白

实在是想不明白了 所以来请教
请高手们赐教
Reply Favorite View the author
All Replies
zhtengw
deepin
2012-11-28 21:42
#1
以下是qt帮助中关于readaAll()函数的说明,
QByteArray QIODevice::readAll ()
This is an overloaded function.

Reads all available data from the device, and returns it as a QByteArray.

This function has no way of reporting errors; returning an empty QByteArray() can mean either that no data was currently available for reading, or that an error occurred.

这个好像不能用来读取程序的输出。

不知你连接的信号和槽是怎样,请你把完整的代码贴上来。
Reply View the author
FEI17
deepin
2012-11-29 03:33
#2
  1. #include
  2. MainWindow::MainWindow(QWidget *parent) :
  3.     QMainWindow(parent),
  4.     ui(new Ui::MainWindow)
  5. {
  6.     ui->setupUi(this);
  7.     cmd=new QProcess(this);
  8.     connect(cmd, SIGNAL(readyReadStandardOutput()), this, SLOT(readresult()));
  9. }
  10. MainWindow::~MainWindow()
  11. {
  12.     delete ui;
  13. }
  14. void MainWindow::on_pushButton_clicked()
  15. {
  16.     ui->textEdit->clear();
  17.     this->cmdtext=ui->lineEdit->text();
  18.     cmd->start(cmdtext);
  19. }
  20. void MainWindow::on_lineEdit_lostFocus()
  21. {
  22. }
  23. void MainWindow::readresult()
  24. {
  25.     QTextCodec *data = QTextCodec::codecForName("UTF-8");
  26.     QString result = data->toUnicode(cmd->readAllStandardOutput());
  27.     ui->textEdit->append(result);
  28. }
  29. void MainWindow::on_outputbutton_clicked()
  30. {
  31.     QTextCodec *data = QTextCodec::codecForName("UTF-8");
  32.     this->cmdresult=data->toUnicode(cmd->readAll());
  33.     ui->textEdit->append(cmdresult);
  34.     QString no="";
  35.     cmdresult=no;
  36. }
Copy the Code
Reply View the author