Я закончил проект в C++
. Это консольное приложение, созданное с помощью CodeBlocks. Хотя я считаю это не столь важным в рамках этого вопроса: приложение управляет данными о счетах и клиентах небольшой компании. Программа завершена и может быть очень легко расширена консольным пользовательским интерфейсом (прямо сейчас я запускаю ее как программиста).
Теперь я решил изучить GUI-программирование с помощью Qt
и QtCreator с помощью QtDesigner!
Не только потому, что обычная практика отделять логику от GUI при создании приложения GUI, я хочу реализовать свой проект на двух больших участках, а именно, логика и GUI.
Вы уже знаете, что логическая часть завершена; у меня есть папка проекта с названием project
, содержащая другую папку (проект CodeBlocks) project_logic
, которая снова содержит несколько классов, поэтому заголовочные файлы и файлы реализации (и основные, что, конечно же, будет устаревшим, в конечном итоге). Он также содержит файлы из /, в которые программа читает/записывает. Он написан в "чистом" C++
и не использует ни одно из средств, предоставляемых Qt
, и для меня важно, чтобы он оставался таким образом!
Теперь я добавил проект Qt
project_gui
в папку project
и начал создавать графический интерфейс, реализуя только самые основные функции, такие как изменение между диалогами, закрытие приложения и т.д. Пока он знает ничего о его будущей стороне (project_logic
).
В качестве третьего компонента мне нужен какой-то управляющий, который связывает логику приложения с его графическим интерфейсом. Вот мой концептуальный вопрос: как лучше всего объединить их в одном приложении?
Предложения
-
Так как
project_logic
может работать отдельно как консольное приложение, он уже предоставляет наиболее важные компоненты и функции управления. Это останется таким, потому что я хочу сохранить свою автономную функциональность. Тем более, что я совершенно не знаком с программированием GUI и/или через две недели, я мог бы создать еще один графический интерфейс для той же логики. Результатом будет то, что классы логической части включаются в источник GUI, как и любой другой заголовок, и используются для создания программы с полной функциональностью. Проверка ввода пользователя будет зависеть от части GUI. Логика программы в любом случае оставалась бы обновляемой. -
Сделать GUI как можно более многоразовым; должен ли я реализовать третий компонент à la
project_controlling
, который обеспечивает взаимодействие между графическим интерфейсом и логикой (подтверждение ввода пользователем, выполняемое посредством управления), в том, что каждый из двух остается как можно более независимым? GUI не включает в себя заголовки логики, так сказать, но включая контрольные заголовки?
Вторая точка может показаться немного странной, я признаю; Короче говоря, мои цели:
- Сохранение стандартного
project_logic
C++
и независимого (с точки зрения исправления, добавления функций и т.д.) и - с использованием
Qt
для GUI при максимальном (в то же время разумном) разделении GUI и логики.
Поезда мысли
-
Должен ли я включать заголовки
project_logic
через#include "../project_logic/header1.h"
и т.д.? (Может возникнуть проблема с использованием классов, которые я опубликую в отдельном вопросе.) -
Должен ли я включать их в качестве подпроекта?
-
Как мне соединить детали "в коде"?
-
Выполняют ли логические функции файлы, о которых я упоминал ранее (чтение/запись)?
Пожалуйста, помните следующее: я новичок в программировании GUI! И я изо всех сил пытался объяснить свои мысли/проблемы... Однако я знаю C и С++ и пишу консольные приложения, которые я использую, например, симуляции в университете и вполне могут справиться со стандартными вещами, я считаю. Даже если потенциальный ответчик чувствует, что предлагает совершенно другой подход, я был бы признателен за "решение" за предложенную мной концепцию. Причина этого я объяснил во введении. Ненужно упомянуть, хотя я, конечно, заинтересован в том, чтобы слышать разные предложения.
Я решил опубликовать этот вопрос после того, как сделал некоторые исследования, и попытался изо всех сил попробовать "проб и ошибок". Существует много информации об этой теме на StackOverflow и других платах, поэтому я хотел представить свою идею и собрать критику и материалы, вместо того, чтобы добавлять другие "как?". к мешанине вопросов.
Поскольку этот вопрос касается общего подхода, я, может быть, (совершенно уверен...: -P) задаю более технические вопросы позже, которые я хотел бы отредактировать в этом вопросе (гиперссылки), как только они возникнут. Однако основные рецепты в этом вопросе, если они есть, приветствуются, конечно.
После некоторых комментариев и ответов я чувствую, что размещаю немного EDIT, чтобы все было ясно:
Текущее состояние логики
-
project_logic
более или менее закончен и закодирован в CodeBlocks как проект CodeBlocks. - Он может работать как консольное приложение с "консольным пользовательским интерфейсом". (Он имеет
main.cpp
, который теперь используется только для отладки.) - Его компоненты по возможности разделяются на классы (заголовки и файлы реализации cpp).
Текущее состояние GUI
-
project_gui
настраивается как проект Qt-Widget-Application (с использованием QtCreator/Designer). - Пока это только графический интерфейс не более (без связи с
project_logic
).
Цели и...
... рабочий процесс, я хочу следовать, так как это мой первый большой проект:
-
project_logic
иproject_gui
не оставят своих соответствующих каталогов; они оба находятся в каталоге с именемproject
. (Исключение: логика будет экспортироваться как DLL (или что-то подобное), если это необходимо, которая затем предоставляется графическому интерфейсу.) - Если в
project_logic
есть вещи, которые нужно изменить, я хочу сделать это в CodeBlocks (и повторить возможный экспорт, как описано выше). -
project_logic
(или любой третий слой, например,project_controlling
), нужно сделать одноразовым дляproject_gui
самым простым способом, который можно вообразить... (см. Поезда мысли №1):-P