Как разработать программу с интерфейсом Qt и разделяемым бэкэндом? - PullRequest
0 голосов
/ 28 февраля 2012

Я хочу разработать внешний интерфейс Qt для программы, которую также необходимо использовать из командной строки. Сначала я решил решить эту проблему с помощью параметра (если он установлен, то пользовательский интерфейс будет создан, в противном случае просто напишите std::out), но у меня возникло ощущение, что я должен разделить эти компоненты и просто создайте программу для бэкэнд-логики (используя простой c ++, если это возможно). В этом случае программа Qt может прочитать и понять вывод серверной части. Тем не менее, при необходимости, бэкэнд мог запускаться один, записывая свои результаты на std::out.

Какой самый элегантный способ вызвать внутреннюю программу из внешнего интерфейса, без блокировки?

Моей первой мыслью по этому поводу было создание дочернего процесса и с помощью exec вызвать бэкэнд, а затем, если бэкэнд закончен, он должен сигнализировать фронтэнд и блокировать, пока фронтенд не завершит чтение, где чтение может быть выполнено через канал или что-то в этом роде.

Это хороший подход? Любые другие советы по реализации?

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

Qt имеет несколько функций, допускающих асинхронное выполнение:

  • Сигнал и слоты : более надежный способ связи, чем обратные вызовы.Вы можете использовать подключение в очереди для последующего запуска слота
  • Qt одновременный : в основном позволяет запускать некоторые методы в пуле потоков.
  • Проверьте этот список

Я бы хотел разработать бэкэнд как API.В частности, в каждом компоненте вам нужно подмножество объектов (может быть, только один), через которые проходит вся связь с внешним компонентом.Старайтесь не помещать слишком много логики во внешний интерфейс и избегайте написания внутреннего интерфейса на основе внешнего вида.Это немного расплывчато: P.

0 голосов
/ 18 января 2013

На вашем месте я бы выбрал одно из двух решений.

Сначала мышление linux "все - файл": создайте два файла, которые бэкэнд и фронтенд проверяют на регулярной основе, один гдеfront-end запрашивает у бэкэнда данные или что-то выполняет.И тот, где вы выводите результат запроса.Вы можете использовать XML, чтобы иметь поле «result» и поле «id запроса».

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

Удачи:)

0 голосов
/ 28 февраля 2012

Вы можете использовать QxORM, ORM на основе Qt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...