Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Взаимодействие между интерфейсом и консольной программой
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
GrimmXXX
Здравствуйте форумчане.
Я новичок в программировании(эх, как будто это кого-то оправдывало Улыбающийся), поэтому вопросы будут скорее глупыми чем серьезными и занятными.
Так получилось что начал я свое знакомство с программирования на Common Lisp. Пользуюсь SBCL+Slime. Пишу небольшие программы для сложных математических расчетов.
Но дело не в этом. Программы все консольные, а написать интерфейс на sbcl оказалось для меня нетривиальной задачей. Коллеги на работе посоветовали написать интерфейс на C++ и прикрутить его к моей программе. Опыта программирования на C++ у меня нет. В простых примерах я разобрался, а вот дальше...

Вроде задача-то простая: Создать окно, создать на нем несколько кнопок, повесить на каждую кнопку свой текст (код на sbcl) который при нажатии просто отправляется в консоль.
Таким образом при запуске программы должен запускаться процесс c SBCL в консоли, а при нажатии одной из кнопок, текст(код на sbcl) отправляется в консоль и выполняется, причем ответ будет в графическом виде в gnuplot и по идее ответ из консоли принимать не обязательно, хотя было бы неплохо чтобы можно было читать ответ и отсылать его в интерфейс.

Все что я смог сделать это запускать SBCL с кнопки.
Гугление не особо помогло.
Можете накидать пример кода, чтобы при нажатии определенная команда отправлялась в консоль. По небольшому примерчику я думаю разберусь. Заранее спасибо.
GrimmXXX
Не нашел кнопку редактировать. Поэтому пишу второй пост.
Написал код. Почему в окне QDebug не выводится ответ 5 а просто какие-то кавычки(")?
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>

int main( int argc, char *argv[] )
{
        QCoreApplication app( argc, argv );

        QProcess process;
        process.start("sbcl\n");
        process.waitForStarted();

        process.write("(+ 3 2)\n");
        process.waitForReadyRead();
        qDebug() << process.readAll();

        process.write("exit\n");
        process.waitForFinished();

        return 0;
}
Iron Bug
возможно, тебе сгодится ECL (embdded lisp), который можно компилить прямо с помощью GCC:
http://chriskohlhepp.wordpress.com/embeddi...splus-a-recipe/

особо помочь не могу, я маленько с ним поигралась - вроде работает. но серьёзных программ с его помощью писать не пробовала.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.