Автор Тема: Показ прогресса выполнения из скрипта в программе на Qt  (Прочитано 1753 раз)

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Есть идея сделать интерфейс с использованием qt, и столкнулся с проблемой взаимодействия скрипта с прогресс баром. Искал в инете разные книжки, статьи, но все написано с учетом, что уже какие-то знания по с++ есть, а нормальных учебников с нуля найти не удалось.
То что оказалось полезным это книжка "Жасмин Бланшет, Марк Саммерфилд - Qt 4".
Сделал простенький интерфейс, несколько окошек, но когда дело дошло до связывания скрипта с баром оказалось проблема.

То есть наверно нужно вернуть вывод readyReadStandardOutput ().
В общем в скрипте проставил метки через echo "1"..."3"..."6"... Как эти метки сопоставить со шкалой прогресс бара?
В общем код пустой такой.

#include "widget.h"
#include "ui_widget.h"
#include <QProcess>
#include <QProgressBar>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_2_clicked()
{
    QProcess process(this);
    process.start("/bin/bash /opt/dll-install/settings.sh");
}

void Widget::on_progressBar_valueChanged(int value)
{
   
}
То есть запускается скрипт посредству QProcess по нажатию кнопки, а как перехватить метки и передать их бару?

Если кто занимался похожим подскажите пожалуйста. Или посоветуйте хорошую литературу, инет ресурсы на эту тему. Практически мне не надо изучать весь с++, достаточно научится оперировать слотами и сигналами, чтоб строить простенькие интерфейсы.
« Последнее редактирование: 22.06.2015 11:34:04 от Skull »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 926
    • Домашняя страница
    • Email
Андрей Черепанов (cas@)

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
http://habrahabr.ru/post/99187/
https://www.linux.org.ru/forum/general/6271079
https://techbase.kde.org/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs#Progress_Dialogs
https://henomis.wordpress.com/2013/08/23/new-qt-project-qbar/
Это все я видел, хочется прилично выглядящего интерфейса с кроссплатформенностью.
Можно вернутся к tk, но он страшненький, пока продолжу мытарства с qt , а потом посмотрю.

Оффлайн ASte

  • Мастер
  • ***
  • Сообщений: 1 550
Как вариант решения задачи - запущенный дочерний процесс (скрипт) пишет в stdout (stderr), родительский процес - программа на qt читает и анализирует вывод дочернего процесса.
Т.е. использовать что-то типа этого:
http://doc.qt.io/qt-5/qprocess.html#readAllStandardOutput
Нужно только проверить что оно отдает вывод раньше чем завершится дочерний процесс (я нa  qt не программировал, деталей не знаю), и возможно читать из отдельного thread - в том случае если родительский блокируется до завершения дочернего (такое тоже бывет, зависит от реализации QProcess)
« Последнее редактирование: 22.06.2015 11:35:40 от Skull »

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 183
  • antohami@
А я в поиске нашёл вот такой проект на QT: http://habrahabr.ru/post/212013/