| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > вывод данных из консоли в виджет |
| Автор: kuvshinka 18.10.2013, 18:54 |
| выполняю некую команду с помощью метода system - ее результат (некий принт) выводится в консоль сборки (запускаю программу из креатора)...А можно ли этот результат выполнения system-а вывести в какой-нибудь виджет (например listwidget)? как это сделать? |
| Автор: CompWorm 18.10.2013, 19:16 |
| случайно не http://qt.apidoc.info/5.1.1/qtcore/qprocess.html#readAllStandardOutput? |
| Автор: kuvshinka 18.10.2013, 19:20 |
| через QProcess я пробовала - он вообще отказывается выполнять команду(ды) формата "cd/home/papka1 && ls && ...", через system все проходит, но результат выполнения команд(ы) хотелось бы видеть в программе, а не в консоли... |
| Автор: o2n3e 18.10.2013, 20:19 |
| Суть в том, что system() - это запуск иного кроцесса(sh, cmd), которым ты норм рулить не можешь и его stdout нормально перехватить не можешь(не через жопу). Запускает программы баш так-то так, как я описал ниже. Это коталоги/директориии, а не "папки". Берёшь qprocess() и запускаешь в нём баш(sh) exec()'ом с вариациями, переводишь stdout в другой поток и читаешь - купроцесс вон может это делать за тебя. Возможно там есть write_stdin() - поищи, сюда пишешь комманды. Баш работает так же. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/вывод-данных-из-консоли-в-виджет-id52615a4eae2015c511000000#findElement_E7045_52616dafae2015051a0001a5_0 |
| Автор: kuvshinka 20.10.2013, 19:47 | ||
Guinness: так и делаю:
в итоге команда быстро проходит, но нужного результата не дает (сборка проекта)...с system все нормально выполняется... |
| Автор: Guinness 21.10.2013, 09:05 |
| Вторую часть поста Вы, видимо, не прочитали. Попробуйте вызвать статический метод execute, весь стандартный вывод программы будет в консоли, возможно увидете какую-нибудь ошибку. Также посмотрите, что Вам вернул execute. |
| Автор: kuvshinka 22.10.2013, 16:01 | ||
в итоге code = 0; не вызываются слоты slotProcessFinished, sltoReadStandardOutput... из консоли запущенная команда(ды) cd papka1 && ls срабатывает верно... без cd papka1 (только ls) execute выводит свой результат (т. е. список файлов в текущем каталоге) в консоль приложения, а не в listWidget (не вызываются слоты slotProcessFinished, sltoReadStandardOutput). Вызываются слоты slotProcessFinished, sltoReadStandardOutput только при вызове команды start qprocess-a и выполнении ею только команды ls. Так как же мне с помощью qprocess-a выполнить команду(ды) типа cd papka1 && ls ? |
| Автор: Guinness 23.10.2013, 07:35 | ||
Надо читать документацию - execute - статический метод:
Т.е. при его вызове никаких сигналов выбрасываться не будеть. Ваша программа будет дожидаться окончания выполнения execute, а весь вывод программы должен появиться в консоли. Кстати, что там вывелось? Если Вы хотите получать сигналы, вызывайте start. Я Вам предложил использовать execute только в целях отладки. А также, потому что я не понял, продолжает ли жить у Вас объект QProcess после вызова start или нет. А так execute должен гарантированно завершить свое выполнение. ЗЫ проверьте имена слотов. ЗЗЫ попробуйте сначала выполнять команды поотдельности, а не фигачить все сразу. Так проще и быстрее искать свои ошибки. |
| Автор: kuvshinka 23.10.2013, 15:40 | ||
команда
ничего не выводит в консоль - видимо такую двойную команду execute не понимает, как и start...да, после выполнения start указатель на объект QProcess-a продолжает жить...по-отдельности я не могу (не знаю как) выполнить "cd papka", а затем "qmake" - мне их надо выполнить в одном контексте (а-ля одном сеансе работы терминала) |
| Автор: Guinness 24.10.2013, 07:07 |
| А абсолютные пути к *pro файлу указывать нельзя? И почему в этом случае не написать необходимый скрипт( например, на bash или python ) и вызывать уже его? |