у меня есть консольное приложение, которое генерировало от бизона (синтаксический анализатор), и я хочу создать простой gui для него так, я могу отправить вход от этого gui до консоли и производиться от консоли в gui., я пытался сделать то использование класс процесса Java, но он не работает на меня, помогите мне сделать тот QT использования.
Это зависит от сложности данных, которые вы хотите передать в / из консольного приложения.
Низкая сложность Используйте некоторые командные переключатели, которые вы передаете из графического интерфейса Qt в консольное приложение. См. Документацию по классу QProcess .
Высокая сложность Я бы выбрал решение, подобное RPC. См. Документацию QtDBus (только для Linux / Unix).
Примечание: я сделал предположение, что вы хотите сохранить сгенерированный синтаксический анализатор bison отдельно от графического интерфейса Qt (на случай, если вам потребуется его повторно сгенерировать).
Невозможно вычислить порядок (то, что вы называете рангом) чего-либо без предварительной сортировки таблицы или сохранения ранга.
Если ваша таблица правильно проиндексирована (индекс популярности), для базы данных тривиально отсортировать это, чтобы вы могли получить свой ранг. Я бы предложил следующее:
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 []
. После этих утверждений, если у вас все еще есть проблема (возможно, вы хотите удалить объект, который был создан кем-то еще), то вы нарушаете третье правило:
Сохраняйте консоль и графическое приложение, два отдельных приложения. У вас уже есть консоль, поэтому давайте посмотрим, как сделать другую:
Создайте обычное приложение GUI в Qt и, используя класс QPprocess
, вызовите консольное приложение. Используйте методы readData ()
и writeData ()
(и аналогичные) этого класса для чтения со стандартного выхода и записи на стандартный вход консольного приложения.
Для получения подробной информации см. документацию QPprocess
.
Альтернатива: Tcl / TK
Если у вас нет веской причины использовать QT, вам может быть проще использовать Tcl / Tk. Tcl изначально разрабатывался для обертывания сценариев и средств графического интерфейса пользователя вокруг существующих программ на языке C, и это, безусловно, самый простой способ сделать это. Он поддерживает довольно много различных способов интеграции кода C, а Tk (набор инструментов GUI, поставляемый с Tcl / Tk) довольно лаконичен для программирования и очень прост в освоении (подумайте: одна двухчасовая лабораторная работа в документе CS).
Возможности интеграции с Tcl:
Tcl может открывать полнодуплексный канал для программы и обмениваться данными по каналу. Пожалуй, это лучший вариант для вас.
Вы можете использовать fork / exec для запуска программы, передавая аргументы командной строки.
Вы также можете встроить интерпретатор Tcl в вашу программу на C; API для этого очень прост.
Tcl имеет API (тоже довольно простой) для расширения интерпретатора новыми командами.
Наверное, еще один или два способа, которые я не могу припомнить.
Я думаю, вам нужно поместить следующие записи в свой .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;
}
Надеюсь, это немного поможет!