Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/39: Рейтинг темы: голосов - 39, средняя оценка - 4.87
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30

Вывод результата выполнения консольной утилиты в QPlainTextEdit

02.03.2013, 03:18. Показов 8330. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Qt5 + Win

Пытаюсь вывести результат выполнения запуска консольки (например ipconfig) не могу сообразить как преобразовать кодировку cp866

Читаю : https://www.cyberforum.ru/post3468139.html
Пробую :
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//-------------------------------------------------------------
void MainWindow::on_pushButton_clicked()
{
    QString Cmd=  tr("ipconfig");
    //QString File= ui->lineEdit->text();
    //QStringList Args;
    //Args<< File;
 
    QProcess *Process= new QProcess(this);
    Process->start(Cmd); // ,Args
 
    if(!Process->waitForFinished())  ui->pushButton->setText("Error");
 
    QTextCodec *codec = QTextCodec::codecForName("IBM-866"); // Изменяем кодировку
    QByteArray encodedString = Process->readAll();
 
    ui->plainTextEdit->setPlainText(encodedString); // В вписываем текст с новой кодировкой
 
    ui->pushButton->setText(QString::number(Process->exitCode()));
 
    delete Process;
}
//-------------------------------------------------------------
Результат:
Миниатюры
Вывод  результата выполнения консольной утилиты в QPlainTextEdit  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2013, 03:18
Ответы с готовыми решениями:

Вывод результата отчёта консольной программы в Memo или RichEdit
Всем привет. :) Я к вам снова с вопросом. Есть консольная программа или батник который запускается с некими параметрами, которые...

Консольное приложение по типу консольной утилиты
Здравствуйте! Передо мной стала задача создать приложение для обработки массивов данных, которые считываются с файла, изменяются и...

Посоветуйте, пожалуйста, паттерн(ы) для консольной утилиты на C#?
Имеется ввиду простая программка, которая принимает несколько разных аргументов командной строки и что-то делает в ответ. Ее ближайший...

11
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.03.2013, 04:04  [ТС]
Решил так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <QProcess>
#include <QTextStream>
 
void MainWindow::on_pushButton_clicked()
{
    QString Cmd=  tr("ipconfig");
    //QString File= ui->lineEdit->text();
    //QStringList Args;
    //Args<< File;
 
    QProcess *Process= new QProcess(this);
    Process->start(Cmd); // ,Args
 
    if(!Process->waitForFinished())  ui->pushButton->setText("Error");
 
    QByteArray BA = Process->readAll();
    QTextStream TextStream ( &BA);
    TextStream.setCodec("IBM-866");
 
    ui->plainTextEdit->setPlainText( TextStream.readAll() ); // В вписываем текст с новой кодировкой
 
    ui->pushButton->setText(QString::number(Process->exitCode()));
 
    delete Process;
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
02.03.2013, 11:30
А что-нибудь типа OemToAnsi в Qt нет? Если нет, тогда вот
C
1
2
3
4
5
6
7
8
9
10
char *dtow(char *p)
{ char c;
   while((c=*p)!='\0') {
     if      (c>=128 && c<176) c+=64;
     else if (c>=224 && c<240) c+=16;
     *p = c;
     p++;
   }
   return(p);
}
Добавлено через 5 минут
Ну и еще конечно к результату применить QString::fromLocal8Bit.
Хотя ваше решение более "в стиле"
0
53 / 53 / 3
Регистрация: 29.12.2012
Сообщений: 135
02.03.2013, 11:49
Я реализую вывод через кодек
C++ (Qt)
1
2
3
4
5
 
    QByteArray BA = Process->readAll();
    QTextCodec *codec = QTextCodec::codecForName("cp866");
 
    ui->plainTextEdit->appendPlainText(codec->toUnicode(BA.data())); // В вписываем текст с новой кодировкой
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.03.2013, 16:54  [ТС]
Блин но вот с обычными утилитами работает, а я хочу вывод утилиты tdump от Builder, эта утилита принимает как параметр имя файла, и возможно с этим проблема.
Как ни пробую так то ли выводит только начало- первые две строки, то ли превышен таймаут.
0
53 / 53 / 3
Регистрация: 29.12.2012
Сообщений: 135
02.03.2013, 16:58
Покажите как делаете.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.03.2013, 17:14  [ТС]
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void MainWindow::on_pushButton_clicked()
{
    QString FileName= tr(".\\release\\TestQt5.exe"); // Файл нашей программы
    QString Cmd=  tr("tdump ")+FileName;
 
    QFileInfo FI(FileName);
    if( ! FI.exists() )
      {
        QMessageBox::warning(this,tr("Error"),"File not exist!",QMessageBox::Yes);
        return;
      }
    QProcess *Process= new QProcess(this);
 
 
    Process->start(Cmd);
 
    if(!Process->waitForFinished() )
        QMessageBox::warning(this,tr("Error"),Process->errorString(),QMessageBox::Yes);
 
    QByteArray BA = Process->readAll();
    QTextStream TextStream ( &BA);
    TextStream.setCodec("IBM-866");
 
    ui->plainTextEdit->setPlainText( TextStream.readAll() );
    ui->pushButton->setText(QString::number(Process->exitCode()));
 
    delete Process;
}
//-------------------------------------------------------------
В архиве сама утилита, на рисунке вывод в программе и то как должно выводить.
Миниатюры
Вывод  результата выполнения консольной утилиты в QPlainTextEdit  
Вложения
Тип файла: rar tdump.rar (186.6 Кб, 23 просмотров)
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.03.2013, 16:34  [ТС]
Есть какие-то соображения почему так?
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
03.03.2013, 17:19
Прочитай ошибки
C++ (Qt)
1
QByteArray QProcess::readAllStandardError()
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.03.2013, 21:19  [ТС]
Да точно...

А что readAll() читает только stdout ?
Turbo Dump Version 6.5.0.0 Copyright (c) 1988-2011 Embarcadero Technologies, Inc.
ERROR: Can not open output file .\release\testqt5.exe.
А как тогда правильно ?

Добавлено через 19 минут
Вообще ничего не понимаю...
Синтаксис утилиты
Syntax: TDUMP [options] [InputFile][ListFile] [options]
То откуда ошибка output file вообще непонятно...

Если попробовать с консоли запустить утилиту и указать неправильно файл то выдаст
C:\Windows\system32>tdump fignia
Turbo Dump Version 6.5.0.0 Copyright (c) 1988-2011 Embarcadero Technologies, Inc.
WARNING: Can not open input file fignia.
Т.е. не то...

Добавлено через 25 минут
Взял другую программу в качестве файла exe как параметра:
при запуске затирает этот файл и пишет туда
Turbo Dump Version 6.5.0.0 Copyright (c) 1988-2011 Embarcadero Technologies, Inc.
Display of File <STDIN>
Затем выдает таймаут...

Добавлено через 1 час 39 минут
Как так получается что вывод перенаправляется внутрь файла указанного как параметр ?

Добавлено через 1 час 24 минуты
Хех... походу все правильно работает ... а проблема в утилите tdump.

И за чего непонятно по тому как в консоли работает нормально и вывод тоже успешно перенаправляется через ">" , но вероятно tdump не взаимодействует через пайпы - у меня была проЖка заготовлена написанная на Builder выполняющая ping.exe и rasdial.exe используя CreateProcess() и CreatePipe() подставив в нее tdump получил тот же результат что и в Qt

Добавлено через 3 минуты
И что интересно команда с параметром tdump -? нормально выполняется без проблем.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
03.03.2013, 22:51
Цитата Сообщение от Avazart Посмотреть сообщение
А что readAll() читает только stdout ?
Скорее всего ошибка(непонятно откуда взялся errorString), но объединить можно так:
C++ (Qt)
1
2
3
4
5
6
7
8
QProcess builder;
builder.setProcessChannelMode(QProcess::MergedChannels);
builder.start("make", QStringList() << "-j2");
 
if (!builder.waitForFinished())
    qDebug() << "Make failed:" << builder.errorString();
else
    qDebug() << "Make output:" << builder.readAll();
Цитата Сообщение от Avazart Посмотреть сообщение
И за чего непонятно по тому как в консоли работает нормально и вывод тоже успешно перенаправляется через ">" , но вероятно tdump не взаимодействует через пайпы - у меня была проЖка заготовлена написанная на Builder выполняющая ping.exe и rasdial.exe используя CreateProcess() и CreatePipe() подставив в нее tdump получил тот же результат что и в Qt
Bash
1
make -j9 > build.log 2> error.log
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.03.2013, 23:08  [ТС]
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
C++
1
make -j9 > build.log 2> error.log
Это вы к чему ?

Я говорю результат один...
Миниатюры
Вывод  результата выполнения консольной утилиты в QPlainTextEdit  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2013, 23:08
Помогаю со студенческими работами здесь

Вывод результата выполнения процедуры
Здравствуйте. Извините за глупый вопрос, никак не могу понять как мне выдать на экран результат выполнения следующей процедуры: Sub...

Вывод результата выполнения в файл
Dim fso Set WshNetwork = CreateObject(&quot;WScript.Network&quot;) namePC = WshNetwork.ComputerName strBackupName = Year(Now) &amp; &quot;_&quot; &amp;...

Вывод результата выполнения скрипта в .csv
Доброго дня, нужна помощь с: Cкрипт опрашивает около 200 компьютеров в лесу AD. Не все из них могут быть доступны, а опросить в конечном...

Вывод результата выполнения скрипта в Excel
И снова добрый день с: Есть некий скрипт, проверяющий железки на всех компьютерах в лесу AD и выводящий результат для каждой отдельной...

Вывод результата выполнения скрипта в модальном окне
суть в следующем: на сайте в шапке задуман адрес и ссылка на схему проезда. в яндексовском api-maps сгенерировал скрипт на вывод объекта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru