25.09.11 / 제60회 전국기능경기대회 전시 작품 제작 프로젝트 2팀(안전/보안) / 7일차

2025. 11. 4. 13:25·LMS 7/개발일지

인증 앱 시작구조 정리

1. 사전준비(DB 연결정보)

<ConfigLoader.h>

#pragma once // 헤더 중복 방지

#include <QString>
#include <QVariant>
#include <QJsonDocument>
#include <QJsonObject>
#include <QFile>
#include <QDir>
#include <QDebug>
#include <QCoreApplication>

struct DbConfig {
    QString driver;
    QString host;
    int     port;
    QString database;
    QString user;
    QString password;
    QString charset;
};

class ConfigLoader {
public:
    static DbConfig load() {
        DbConfig cfg;
        cfg.driver   = "QMYSQL";
        cfg.host     = "127.0.0.1";
        cfg.port     = 3306;
        cfg.database = "enroll_recognize";
        cfg.user     = "root";
        cfg.password = "Marin0806!";   // ← 하드코딩
        cfg.charset  = "utf8mb4";
        return cfg;
    }
};

> DB 정보 하드코딩 후 public으로 선언(DbManager.h에서 사용하기 위함)

 

<DbManager.h>

#pragma once // 헤더 중복 방지

#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QDebug>
#include "ConfigLoader.h"

class DbManager {
public:
    explicit DbManager(const QString& connectionName)
        : connName(connectionName) {}

    bool open() {
        if (QSqlDatabase::contains(connName)) {
            db = QSqlDatabase::database(connName);
        } else {
            DbConfig cfg = ConfigLoader::load();
            db = QSqlDatabase::addDatabase(cfg.driver, connName);
            db.setHostName(cfg.host);
            db.setPort(cfg.port);
            db.setDatabaseName(cfg.database);
            db.setUserName(cfg.user);
            db.setPassword(cfg.password);
        }
        if (!db.open()) {
            qCritical() << "[DbManager] Failed to open DB:" << db.lastError().text();
            return false;
        }
        QSqlQuery q(db);
        q.exec("SET NAMES utf8mb4");
        return true;
    }

    void close() {
        if (db.isValid()) {
            db.close();
        }
        QSqlDatabase::removeDatabase(connName);
    }

    QSqlDatabase database() const { return db; }

private:
    QString connName;
    QSqlDatabase db;
};

> ConfigLoader 객체를 사용해서 DB open / close 함수를 정의하여 public으로 선언

> 멤버변수들 중 db를 private로 선언하여 오로지 open / close 함수로만 변경할 수 있도록 은닉화함


2. 생성자 및 소멸자

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow) {
    // 1. UI 준비
    ui->setupUi(this);

    // 2. DB 동적 생성
    // db에 이름을 붙이는 이유는 읽기 전용, 쓰기 전용, 다른 db 등 여러 db에 접속할 수 있음을 고려(확장성 고려)
    db = new DbManager("RecognizeConnection");
    // 2.1 DB의 사용자 얼굴 이미지로 학습
    if (trainFromDatabase()) {
        setMessage("모델 준비 완료");
    } else {
        setMessage("모델 준비 실패(등록 데이터 부족 또는 DB 오류)");
    }

    // 3. 시리얼 포트 연결 시도
    if (!openSerial("/dev/rfcomm0", 9600)) {
        if (!openSerial(QString(), 9600)) {
            openSerial("/dev/ttyACM0", 9600);
        }
    }

    // 4. 카메라 시작
    startCamera();
}

MainWindow::~MainWindow() {
    // 1. 카메라 종료
    stopCamera();

    // 2. 시리얼 닫기(MainWindow가 파괴되면서 닫히지만 명시적으로 닫아줌)
    if (serial.isOpen()){
        serial.close();
    }

    // 3. DB 동적 해제
    if (db){
        db->close();
        delete db;
        db = nullptr;
    }

    // 4. UI 제거
    delete ui;
}

 

생성자 : UI 준비 -> DB 생성 후 로 사용자 얼굴 학습 -> 시리얼 포트 연결 -> 카메라 시작

소멸자 : 카메라 종료 -> 시리얼 포트 닫기 -> DB 닫기 -> UI 제거

'LMS 7 > 개발일지' 카테고리의 다른 글

25.09.15 / 제60회 전국기능경기대회 전시 작품 제작 프로젝트 2팀(안전/보안) / 9일차  (0) 2025.11.04
25.09.12 / 제60회 전국기능경기대회 전시 작품 제작 프로젝트 2팀(안전/보안) / 8일차  (0) 2025.11.04
25.09.10 / 제60회 전국기능경기대회 전시 작품 제작 프로젝트 2팀(안전/보안) / 6일차  (0) 2025.11.04
25.09.09/ 제60회 전국기능경기대회 전시 작품 제작 프로젝트 2팀(안전/보안) / 5일차  (0) 2025.11.04
25.09.08 / 제60회 전국기능경기대회 전시 작품 제작 프로젝트 2팀(안전/보안) / 4일차  (0) 2025.11.04
'LMS 7/개발일지' 카테고리의 다른 글
  • 25.09.15 / 제60회 전국기능경기대회 전시 작품 제작 프로젝트 2팀(안전/보안) / 9일차
  • 25.09.12 / 제60회 전국기능경기대회 전시 작품 제작 프로젝트 2팀(안전/보안) / 8일차
  • 25.09.10 / 제60회 전국기능경기대회 전시 작품 제작 프로젝트 2팀(안전/보안) / 6일차
  • 25.09.09/ 제60회 전국기능경기대회 전시 작품 제작 프로젝트 2팀(안전/보안) / 5일차
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
25.09.11 / 제60회 전국기능경기대회 전시 작품 제작 프로젝트 2팀(안전/보안) / 7일차
상단으로

티스토리툴바