Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Программа без формы [Qt]


Автор: BIV 28.10.2010, 23:24
Всем доброе время суток!
Как создавать проекты, у которых нет формы (не консольное приложение)?
Как еще посылать команды в консоль ОС?

Автор: BIV 29.10.2010, 00:31
Как сделать без формы я только что разобрался, а вот как посылать команды в командную строку (терминал) пока остается вопросом

Автор: SABROG 29.10.2010, 08:32
Цитата(BIV @  29.10.2010,  00:31 Найти цитируемый пост)
а вот как посылать команды в командную строку (терминал) пока остается вопросом 

QProcess / system() ?

Автор: BIV 29.10.2010, 18:32
Ага, спасибо!
Но как выполнять сразу несколько команд?
Если набрать

system(dir);
system("pause");

то запустится командная строка, покажет содержимое в директории, потом закроется, запуститься новое и выполниться остановка. Как выполнить все команды в одном окне?
Как получать то, что выводит командная строка?

Автор: null56 30.10.2010, 00:18
Цитата(BIV @  29.10.2010,  18:32 Найти цитируемый пост)
Как выполнить все команды в одном окне?

в никсах разделитель был точка с запятой, в винде хз
Код

dir; pause

Автор: null56 30.10.2010, 00:40
Цитата(BIV @  29.10.2010,  18:32 Найти цитируемый пост)
Как получать то, что выводит командная строка? 

может что - то типа этого?
Код

 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();

Автор: BIV 30.10.2010, 22:29
Хотелось бы уточнить, что такое qDebug()?
Можно ли вывод консоли передать в переменную? Это нужно для того, чтобы выдерать оттуда нужные мне сообщения и выводить их в отдельное окно. Пусть эти сообщения записываются в строку

Автор: null56 30.10.2010, 23:19
Цитата(BIV @  30.10.2010,  22:29 Найти цитируемый пост)
Хотелось бы уточнить, что такое qDebug()?

отладочная печать
Цитата(BIV @  30.10.2010,  22:29 Найти цитируемый пост)
Можно ли вывод консоли передать в переменную? Это нужно для того, чтобы выдерать оттуда нужные мне сообщения и выводить их в отдельное окно. Пусть эти сообщения записываются в строку

в этом примере, который я выдернул из ассистента, как раз приводится возможность прочитать вывод с stdout и stderror....
я не проверял данный пример, но скажу, что он делает
Цитата(null56 @  30.10.2010,  00:40 Найти цитируемый пост)
 QProcess builder;
 builder.setProcessChannelMode(QProcess::MergedChannels);
 builder.start("make", QStringList() << "-j2");

- создается объект класса, которому задается возможность слежения за обоими стандартными потоками, которые тебе нужны
Цитата

QProcess::MergedChannels - QProcess merges the output of the running process into the standard output channel (stdout). The standard error channel (stderr) will not receive any data. The standard output and standard error data of the running process are interleaved.

- далее функция - метод класса start запускает команду make с аргументом -j2
Код

builder.start("make", QStringList() << "-j2");

- далее ожидается окончание выполнения заданных команд
Код

builder.waitForFinished()

- далее на основании условия анализируется вывод
Твой вывод ты сможешь по идее получить через методы класса.
stdout через
Код

 builder.readAll()

srderr через
Код

builder.errorString()

описание этих методов смотри в ассистенте в классе QProcess, они возвращают строки, что тебе и нужно
попробуй набей этот пример и посмотри, что получится, только вместо make используй свои dir и Ко... )

Автор: BIV 31.10.2010, 00:02
Спасибо, есть чем заняться!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)