Я пытаюсь создать простое приложение GUI в QT Creator, которое использует wget
для загрузки файлов с веб-сайтов. Я хочу видеть вывод wget
в графическом интерфейсе.Отображение вывода консоли wget в Gui
Я хочу, чтобы этот вывод:
--2014-04-27 13:58:58-- http://google.com/
Resolving google.com (google.com)... 74.125.224.192, 74.125.224.193, 74.125.224.206, ...
Connecting to google.com (google.com)|74.125.224.192|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.google.com/ [following]
--2014-04-27 13:58:58-- http://www.google.com/
Resolving www.google.com (www.google.com)... 74.125.224.210, 74.125.224.209, 74.125.224.208, ...
Connecting to www.google.com (www.google.com)|74.125.224.210|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’
[ <=> ] 11,802 --.-K/s in 0.005s
2014-04-27 13:58:58 (2.16 MB/s) - ‘index.html’ saved [11802]
Это то, что я до сих пор. Он загружает файл, но я не вижу выхода в текстовом браузере. Я передаю вывод QProcess в текстовый браузер. Команды, такие как ls
do отображение выход.
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QProcess>
#include <stdlib.h>
#include <string>
using namespace std;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
process = new QProcess(this);
//connect (process, SIGNAL(readyReadStandardOutput()), this, SLOT(printOutput()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
ui->label->setText("Pressed!");
}
void MainWindow::printOutput()
{
ui->display->setPlainText(process->readAllStandardOutput());
}
void MainWindow::on_lineEdit_returnPressed()
{ connect (process, SIGNAL(readyReadStandardOutput()), this, SLOT(printOutput()));
string result = "wget ";
result += ui->lineEdit->text().toStdString();
ui->label->setText("Fetching...");
QString lawl = QString::fromStdString(result);
options.clear();
#if defined(Q_OS_LINUX)
options << "-c" << lawl;
process->start("/bin/sh", options);
#elif defined(Q_OS_WIN)
process->start(ui->lineEdit->text(), options);
#endif
process->waitForFinished();
}
С process->setProcessChannelMode(QProcess::MergedChannels);
Выход:
129K=0.09s
2014-04-27 19:11:14 (129 KB/s) - ‘index.html.3’ saved [11786]
Это может помочь: http://stackoverflow.com/questions/3852587/how-to-get-stdout-from-a-qprocess –
@ 1.618 Спасибо! Он обеспечивает выход, но не совсем все. Я обновил вопрос с выходом. –
'wget' может изменить свой вывод в зависимости от того, является ли его вывод терминалом или нет. (Он может обнаружить это через функцию 'isatty' C или эквивалент.) Если это так, вам нужно сделать некоторые« создания псевдо-TTY », чтобы заставить его выводить то, что вы хотите (у меня нет подробных сведений ; Прости). –