IscanderChe
IscanderChe15 липня 2019 р. 07:32

Проект Simple Tracker. Частина 2: структура проекту

Загальну структуру показано нижче.

Назва проекту я підправив. Але в заголовках статей та мітках я все одно залишу «Simple tracker», щоб не було плутанини.

Проект складається з підпроектів клієнтської та серверної частини та підпроекту тестування. Головний файл проекту має такий вигляд.

TEMPLATE = subdirs

CONFIG   += ordered

SUBDIRS += ICTrackerServer ICTrackerClient tests

Варто звернути увагу на файл common.pri, який видно підпроектами клієнта та сервера (а також підключатиметься до тестів у міру необхідності). Туди я вписав додаткові директиви, які були підглянуті в інших проектах.

# Переменная PWD разворачивается в путь к файлу *.pro/*.pri, в котором используется
BUILD_DIR = $${PWD}/build

# В зависимости от типа билда, debug или release, устанавливаем соответствующее
# значение переменной BUILD_TYPE
CONFIG(release, debug|release){
    message(Release)
    BUILD_TYPE = release
}else{
    message(Debug)
    BUILD_TYPE = debug
}

DEST_BINS = $${BUILD_DIR}/$${BUILD_TYPE}

# В зависимости от платформы, на которой собираем проект, устанавливаем
# расположение исполняемых файлов.
# Регулярное выражение "s,/,\\,g" в SOME_VAR ~= s,/,\\,g означает
# "заменить в переменной SOME_VAR прямой слэш ("/") на обратный слэш ("\")".
win32 {
    DEST_BINS ~= s,/,\\,g
    DESTDIR = $${DEST_BINS}
}

linux {
    DESTDIR = $${DEST_BINS}
}

# Остальные файлы, которые генерируются по ходу сборки, выносим за пределы репозитория.
# Переменная OUT_PWD разворачивается в путь построения билда,
# заданный в Qt Creator в настройках проекта.
MOC_DIR        = $${OUT_PWD}/$${BUILD_TYPE}/moc
UI_DIR         = $${OUT_PWD}/$${BUILD_TYPE}/ui
UI_HEADERS_DIR = $${OUT_PWD}/$${BUILD_TYPE}/ui
UI_SOURCES_DIR = $${OUT_PWD}/$${BUILD_TYPE}/ui
OBJECTS_DIR    = $${OUT_PWD}/$${BUILD_TYPE}/obj
RCC_DIR        = $${OUT_PWD}/$${BUILD_TYPE}/rcc

Таким чином, при компіляції проекту в debug-режимі структура папок може мати приблизно такий вигляд.

Поряд з папками вихідних формується папка build з двома підпапками debug і release, куди записуються тільки файли, що виконуються.

Інші файли виносяться за межі дерева проекту.

Я розмістив файл common.pri в корені проекту і підключив до pro-файлів підпроектів за допомогою директиви include.

include(../common.pri)

Тепер розглянемо підпроекти.

У клієнта, крім файлів pro та pri є тільки main.cpp. Оскільки клієнт передбачається консольним, швидше за все, крім допоміжних функцій, більше нічого не знадобиться.

Залишається лише дописати у pro-файл підтримку мережі.

QT += network

У сервера завдань більше, і тому структура його складніша. Тут є клас TrackerServer, який відповідає за формування GUI трекера та роботу сервера. На зображенні показаний і клас DataBase, який відповідає за роботу з базою даних. Також під час розробки будуть додані класи для реалізації діалогових вікон.

Тут у pro-файл, крім підтримки мережі, потрібно додати підтримку SQL.

QT += sql network

Підпроект tests сам складатиметься з підпроектів, тому в pro-файлі записано таке:

TEMPLATE = subdirs

CONFIG   += ordered

SUBDIRS +=

Зі структурою проекту в першому наближенні закінчено. У наступній частині я опишу базу даних та її тестування.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

Evgenii Legotckoi
  • 16 липня 2019 р. 04:05

Я правильно понимаю, что сервер будет формироавть API для доступа клиентов, а клиенты не будут иметь прямого доступа к базе данных?

Вы используете JSON для формирования сообщений между сервером и клиентами?

IscanderChe
  • 16 липня 2019 р. 12:36

Да, прямой доступ не предполагается. Впрочем, можно, конечно, и напрямую. Всё равно всё локально происходит. Проблема в том, как донести сведения об изменениях в базе, которые вносит клиент, до модели QSqlTableModel, которая в сервере? Если как-то можно, то тогда надобность в QLocalServer и QLocalSocket, конечно, отпадает.

Нет, JSON не использую. Просто QByteArray и QDataStream. От клиента серверу передётся всего три параметра: наименование проекта, номер закрываемой задачи и номер ревизии, закрывающей задачу.

Evgenii Legotckoi
  • 16 липня 2019 р. 14:47

Лучше API )))

Кстати, по использованию QLocalServer и QLocalSocket на сайте нет статей, было бы очень полезно и хорошо пошло бы в раздел Qt.

IscanderChe
  • 16 липня 2019 р. 15:05
  • (відредаговано)

Так пример с QLocalServer и QLocalSocket я целиком переписал с QTcpSocket и QTcpServer из книги Шлее. Принципиальное отличие - где коннект ставить. :)) Разве что на это упор сделать. Но я могу этот пример кинуть с поправкой на то, откуда оригинал взят.

Evgenii Legotckoi
  • 16 липня 2019 р. 15:15

Конечно )) На самом деле не все читали Шлее... я например не читал ))

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50бали,
  • Рейтинг балів-4
m
  • molni99
  • 26 жовтня 2024 р. 01:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
m
  • molni99
  • 26 жовтня 2024 р. 01:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20бали,
  • Рейтинг балів-10
Останні коментарі
i
innorwall14 листопада 2024 р. 19:03
Qt/C++ - Урок 060. Налаштування зовнішнього вигляду програми під час виконання I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
i
innorwall14 листопада 2024 р. 11:42
Як скопіювати файли в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
i
innorwall14 листопада 2024 р. 09:09
Qt/C++ - Підручник 068. Hello World за допомогою системи збирання CMAKE в CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
i
innorwall14 листопада 2024 р. 04:05
EVILEG-CORE. Використання Google reCAPTCHA 2001; 98 29 34 priligy buy
Тепер обговоріть на форумі
i
innorwall14 листопада 2024 р. 03:39
добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
i
innorwall11 листопада 2024 р. 10:55
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
9
9Anonim25 жовтня 2024 р. 09:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Игорь Максимов03 жовтня 2024 р. 04:05
Реализация навигации по разделам Спасибо Евгений!

Слідкуйте за нами в соціальних мережах