Всем привет! Учусь работать с классом QProcess.
Архитектура программы:
На форме имеются TextBrowser, LineEdit и PushButton;
С помощью класса QProcess запускается командная строка (cmd - объект класса QProcess);
В TextBrowser отображается то, что командная строка пишет нам, а с помощью LineEdit и PushButton можно писать и отправлять команды;
Код простой и незатейливый:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
cmd.setParent(this);
cmd.start("cmd");
read();
}
Widget::~Widget(){ delete ui; }
void Widget::on_pushButton_clicked()
{
cmd.write(ui->lineEdit->text().toUtf8());
cmd.waitForBytesWritten();
ui->lineEdit->clear();
read();
}
void Widget::read()
{
QString output;
bool canRead = true;
while (canRead){
cmd.waitForReadyRead(1000);
QString temp = cmd.readAll();
if (temp.isEmpty()){
canRead = false;
}else{
output.append(temp);
}
}
ui->textBrowser->setText(output);
}
Частично программа работает, выводит на экран следующее:
Во-первых, кракозябры. Не понимаю, что можно с этим сделать, ведь в Qt 5 был сильно урезан класс QTextCodec;
Во-вторых, никакие команды на ввод не работают, после любой команды экран просто очищается (то есть cmd ничего не отвечает);
В-третьих, я не думаю, что моя функция read() является самой оптимальной для чтения из процесса... Может быть, можно как-то сделать, чтобы текст из командной строки читался тогда, когда командная что-то написала?
И кстати, командная строка запускается в "невидимом" режиме. Хотя в диспетчере задач она есть. Это так и надо или признак бага?
И любые другие комментарии по поводу этой программы.
Буду рад любой помощи!