используя qt: как создать графическую оболочку консольного приложения? - PullRequest
6 голосов
/ 03 февраля 2010

У меня есть консольное приложение, сгенерированное из bison (парсер), и я хочу создать для него простой графический интерфейс так что я могу отправить вход из этого интерфейса на консоль и получить вывод с консоли в графический интерфейс. Я пытался сделать это с помощью класса процесса Java, но он не работает для меня, пожалуйста, помогите мне сделать это используя qt.

Ответы [ 5 ]

4 голосов
/ 03 февраля 2010

Это зависит от сложности данных, которые вы хотите вводить / выводить из консольного приложения.

Низкая сложность Используйте некоторые командные переключатели, которые вы передаете из вашего Qt GUI в вашконсольное приложение.Посмотрите на документацию класса QProcess .

Высокая сложность Я бы выбрал RPC-подобное решение.Посмотрите документацию QtDBus (только для Linux / Unix).

Примечание: я сделал предположение, что вы хотите, чтобы ваш сгенерированный синтаксический анализатор зубров был отделен от вашего графического интерфейса Qt (на случай, если вам понадобится восстановить его снова).

1 голос
/ 21 июня 2012

из http://www.qtcentre.org/threads/33506-where-is-cout-in-Qt-Creator

первое добавление

CONFIG   += console 

в ваш .pro файл

второе использование

#include <stdio.h>

  QTextStream out(stdout);
  out << QString("Some text");

Для меня это работает так.

Веселись

1 голос
/ 03 февраля 2010

Держите вашу консоль и графическое приложение, два отдельных приложения.У вас уже есть консоль, поэтому давайте посмотрим, как сделать другую:

Создайте обычное приложение с графическим интерфейсом в Qt и, используя класс QProcess, вызовите ваше консольное приложение.Используйте методы readData() и writeData() (и аналогичные) этого класса для чтения из стандартного вывода и записи в стандартный ввод вашего консольного приложения.

Подробнее см. Документацию QProcess.

1 голос
/ 03 февраля 2010

Я думаю, что вы должны поместить следующие записи в ваш .PRO файл:

\# Application template<br>
TEMPLATE = app

\# QMake configuration<br>
CONFIG  += console

Затем вы можете создать Окно в Qt, и у вас будет главное окно рядом с консолью!

Пример:

main.cpp
{
    QApplication App(argc, argv);
    ...
    MainFrm* pMainFrm = new MainFrm();
    pMainFrm->show();
    ...
    int ExitCode = App.exec();
    return ExitCode;
}

Надеюсь, это немного поможет!

0 голосов
/ 03 февраля 2010

Альтернатива: Tcl / TK

Если у вас нет веских оснований для использования QT, вам может показаться, что его проще использовать Tcl / Tk. Tcl был спроектирован с нуля для обертывания сценариев и средств графического интерфейса вокруг существующих программ на C и, безусловно, Самый простой способ сделать это. Он поддерживает несколько различных способов интеграции кода C, и Tk (набор инструментов GUI, поставляемый с Tcl / Tk) довольно лаконичен в программировании и очень прост в освоении (подумайте: одна 2-часовая лабораторная работа в CS-документе).

Особенности интеграции Tcl:

  • Tcl может открыть полнодуплексный канал для программы и установить связь по каналу. По-видимому, это лучший вариант для вас.

  • Вы можете использовать fork / exec для запуска программы, передавая аргументы командной строки.

  • Вы также можете встроить интерпретатор Tcl в вашу C-программу; API для этого очень прост.

  • Tcl имеет API-интерфейсы (также довольно простые) для расширения интерпретатора новыми командами.

  • Возможно, один или два других способа, которые я не могу вспомнить с макушки головы.

...