Russian Qt Forum

Программирование => Общий => Тема начата: __Heaven__ от Январь 29, 2015, 10:40



Название: Устройство дерева проекта
Отправлено: __Heaven__ от Январь 29, 2015, 10:40
Привет друзья!
По сей день писал программы относительно небольшие и в одно лицо. Поэтому особо не заморачивался насчёт хранения файлов.
Сейчас у меня все файлы хранятся в корне проекта, что напоминает своего рода бардак. Там и иконки, и код, и pro-файл, и шейдерные исходники, и текстовые шаблоны ну и всякие настройки пользователя и мусор от MSVC.
Уже скоро мне нужно будет начинать проект, пока что тоже в одно лицо, но в будущем его разработкой, возможно, будут заниматься и другие участники. Данный проект будет достаточно большим. Меня это толкает задуматься, как вести проект, чтобы в будущем было меньше шишек и подзатыльников.
Посему хочу спросить у опытных участников, как принято организовывать файловую структуру проекта, а также дерево внутри проекта(ресурсы, шаблоны и т.д.), файлы переводов (с ними не работал ниразу).
Преимущественно пишу в QtCreator, но, для отладки трудновыявляемых багов запускаю MSVC.


Название: Re: Устройство дерева проекта
Отправлено: Пантер от Январь 29, 2015, 11:16
Глянь мою структуру https://github.com/panter-dsd/QDBFRedactor


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Январь 29, 2015, 11:32
Спасибо. Смотрю...
Проект у меня не компилируется. Так понял, наверное нужна 4.x
А почему ты не используешь дизайнер для создания форм?


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Январь 29, 2015, 11:39
В самом проекте отсутствуют core, dialogs, 3dparty.
Почему их там нет?


Название: Re: Устройство дерева проекта
Отправлено: Пантер от Январь 29, 2015, 12:08
Спасибо. Смотрю...
Проект у меня не компилируется. Так понял, наверное нужна 4.x
А почему ты не используешь дизайнер для создания форм?
Да, проект старый, на 4 Кьюте. Дизайнер тогда не юзал, но это особо ничего не меняет. ui храню рядом с h/cpp.


Название: Re: Устройство дерева проекта
Отправлено: Пантер от Январь 29, 2015, 12:09
В самом проекте отсутствуют core, dialogs, 3dparty.
Почему их там нет?
Хм. Все есть. https://github.com/panter-dsd/QDBFRedactor/tree/master/src


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Январь 29, 2015, 12:16
Я имел в виду, что этих папок не видно в .pro


Название: Re: Устройство дерева проекта
Отправлено: Пантер от Январь 29, 2015, 12:23
Там сборка через CMake, pro некорректен.


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Январь 29, 2015, 12:40
Я с CMake не знаком. Почему предпочтение было отдано ему?


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Январь 29, 2015, 12:50
А еще меня всегда пугают папки core. Не представляю, как отделить интерфейс.
Допустим, у меня имеется SDI приложение. Я в centralWidget пишу все структуры, массивы, методы load, save, operate.


Название: Re: Устройство дерева проекта
Отправлено: kai666_73 от Январь 29, 2015, 13:12
А еще меня всегда пугают папки core. Не представляю, как отделить интерфейс.
Допустим, у меня имеется SDI приложение. Я в centralWidget пишу все структуры, массивы, методы load, save, operate.
Думается мне что core не для разделения ГУИ и данных. Скорее всего в core описаны интерфейсы (абстрактные классы) для минимизации зависимостей между библиотеками... (не уверен что в приведенном примере именно так)
А по существу, на вашем месте я бы сначала занялся реструктуризацией/рефакторингом существующего (захамленного) проекта )


Название: Re: Устройство дерева проекта
Отправлено: Пантер от Январь 29, 2015, 13:38
Я с CMake не знаком. Почему предпочтение было отдано ему?
Он удобнее намного.


Название: Re: Устройство дерева проекта
Отправлено: Пантер от Январь 29, 2015, 13:39
А еще меня всегда пугают папки core. Не представляю, как отделить интерфейс.
Допустим, у меня имеется SDI приложение. Я в centralWidget пишу все структуры, массивы, методы load, save, operate.
Вот лучше структуры и работу с ними выносить в ядро, а из виджетов дергать методы из ядра.


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Январь 29, 2015, 14:09
на вашем месте я бы сначала занялся реструктуризацией/рефакторингом существующего (захамленного) проекта )
Да, кстати, будет хорошей практикой. Спасибо.

А еще меня всегда пугают папки core. Не представляю, как отделить интерфейс.
Допустим, у меня имеется SDI приложение. Я в centralWidget пишу все структуры, массивы, методы load, save, operate.
Вот лучше структуры и работу с ними выносить в ядро, а из виджетов дергать методы из ядра.
Я только сейчас понял, что у меня уже имеется некоторая отдельная часть, которую можно вынести в ядро.
Спасибо. Думаю, что это пока что не всё - вопросы ещё появятся.


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Февраль 03, 2015, 15:07
С переводами я тоже впервые столкнулся.
Файлы ts и qm обычно хранятся в одной папке?


Название: Re: Устройство дерева проекта
Отправлено: Пантер от Февраль 03, 2015, 15:24
qm можно формировать на этапе инсталла и кидать сразу куда нужно. Держать их смысла не имеет.


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Февраль 03, 2015, 16:08
Угу, понятно. Спасибо.


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Февраль 03, 2015, 16:29
А во время компиляции (дебага) я могу кидать переводы в папку сборки?

QMAKE_POST_LINK += postbuild.bat не работает


Название: Re: Устройство дерева проекта
Отправлено: kambala от Февраль 03, 2015, 19:43
попробуй call postbuild.bat


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Февраль 03, 2015, 19:47
попробуй call postbuild.bat
Не, игнорируется.
Это всё можно сделать в настройках сборки, но хочется делиться проектом, чтобы вручную не заводить дополнительные параметры.


Название: Re: Устройство дерева проекта
Отправлено: kambala от Февраль 03, 2015, 20:27
тогда сунь содержимое батника в QMAKE_POST_LINK, по одной команде. у меня вот такое работает:
Код:
    QMAKE_POST_LINK = sed -e \'s/@APP_VERSION@/$$VERSION/\' -e \'s/@COPYRIGHT@/$$COPYRIGHT/\' -i \'\' $$INFO_PLIST_PATH;

    isEmpty(IS_RELEASE_BUILD) {
        # create symlinks instead of copying in debug mode
        QMAKE_POST_LINK += [ -L $$BUNDLE_DATA ] || ln -s $$_PRO_FILE_PWD_/$$PROJECT_DATA $$BUNDLE_DATA;
        QMAKE_POST_LINK += [ -L $$BUNDLE_TR ]   || ln -s $$_PRO_FILE_PWD_/$$PROJECT_TR   $$BUNDLE_TR;
    }
    else {
        # remove unused files
        QMAKE_POST_LINK += rm -rf $$BUNDLE_DATA/items $$BUNDLE_TR/*.ts;
    }


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Февраль 03, 2015, 20:46
Не, не работает. Кстати, Qt 5.4.

Хочу ещё вопрос спросить.
Как поступить.
Вот есть у меня геометрия. С ней нужно оперировать функциями. В моём проекте всё это хранится в mainwindow.

Правильнее, наверное, сделать класс GeometryStorage, который будет хранить геометрию, класс GeometryReader - friend предыдущему для открытия файлов, класс GeometrySaver, GeometryOptimizer, GeometryWorker.
Какое будет мнение?


Название: Re: Устройство дерева проекта
Отправлено: Bepec от Февраль 04, 2015, 01:50
Тут имеется золотая середина, которая у каждого своя.

Приведу пример.
Цель: создать объект класса. Типов класса может быть 3.
Моё решение: 3 класса, внучата одного общего с общим же интерфейсом. Возвращаются из ф-ции myObject * createObject(); Если ошибка, возвращаем NULL.
Решение другого программиста: фабрика классов, которой должен быть передан умный указатель, правда перед этим фабрика должна быть инициализирована списком допустимых классов,  ошибку можно получить лишь после передачи умного указателя в фабрику ошибок.

Оба решения верны, оба имеют и плюсы и минусы, но мне импонирует моё решение :D

PS Каждый выбирает для себя :)


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Февраль 09, 2015, 09:33
Попалась такая проблема:
Дерево проекта упрощённо выглядит так:
*.pro
src
+dialogs
    +MyDialog.ui
+widgets
    +MyWidget.h

Теперь я хочу преобразовать с помощью дизайнера виджет, находящийся на MyDialog.ui, в мой виджет.
Что мне необходимо указывать в качестве заголовочного файла?
В ubuntu подошло "../../src/widgets/mywidget.h" по той причине, что сборка происходит в папку ./build.
В винде же у меня используется для сборки папка ../build.


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Февраль 09, 2015, 09:44
%{CurrentProject:Path} как-то можно передать?


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Февраль 09, 2015, 15:08
Решил вопрос с помощью
Код:
INCLUDEPATH += ./src/widgets
Но мне кажется это не элегантным решением


Название: Re: Устройство дерева проекта
Отправлено: Пантер от Февраль 09, 2015, 15:11
Решил вопрос с помощью
Код:
INCLUDEPATH += ./src/widgets
Но мне кажется это не элегантным решением
Вполне правильное решение.


Название: Re: Устройство дерева проекта
Отправлено: __Heaven__ от Февраль 09, 2015, 16:50
Спасибо.