использование QT: Как Создать Gui OnTop Консольного приложения?

у меня есть консольное приложение, которое генерировало от бизона (синтаксический анализатор), и я хочу создать простой gui для него так, я могу отправить вход от этого gui до консоли и производиться от консоли в gui., я пытался сделать то использование класс процесса Java, но он не работает на меня, помогите мне сделать тот QT использования.

6
задан Radi 17 February 2011 в 10:57
поделиться

4 ответа

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

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

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

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

4
ответ дан 17 December 2019 в 00:09
поделиться

Невозможно вычислить порядок (то, что вы называете рангом) чего-либо без предварительной сортировки таблицы или сохранения ранга.

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

Выберите все, включая ранг

SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;

Чтобы получить предмет с определенным «идентификатором», можно просто использовать подзапрос следующим образом:

Выберите один, включая ранг

SET @rank := 0;
SELECT * FROM (
  SELECT t.*, @rank := @rank + 1
  FROM table t
  ORDER BY t.popularity
) t2
WHERE t2.id = 1;
-121--4859594-
  • Используйте delete , если вы выделили new .
  • Используйте delete [] при присвоении new [] .

После этих утверждений, если у вас все еще есть проблема (возможно, вы хотите удалить объект, который был создан кем-то еще), то вы нарушаете третье правило:

  • Всегда удалять то, что вы создали. Поэтому никогда не удаляйте то, что не создавали.
-121--3780348-

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

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

Для получения подробной информации см. документацию QPprocess .

1
ответ дан 17 December 2019 в 00:09
поделиться

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

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

Возможности интеграции с Tcl:

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

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

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

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

  • Наверное, еще один или два способа, которые я не могу припомнить.

0
ответ дан 17 December 2019 в 00:09
поделиться

Я думаю, вам нужно поместить следующие записи в свой .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;
}

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

1
ответ дан 17 December 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: