카테고리 없음

[5주차] Qt 일정관리 앱 프로젝트

2026. 4. 22. 16:25

VEDA 프로젝트 기록

[5주차] 일정관리 앱 프로젝트

이번 프로젝트를 한 문장으로 정리하면: Qt 기반 일정관리 앱을 설계하고, 달력 중심 UI와 일정 CRUD, 검색, 입출력 기능을 하나의 데스크톱 앱으로 구현하는 과정

작성일: 2026.04.22

관련 링크

◀ GitHub 저장소: ScheduleManagement / ohk01 브랜치

 이번주차 일지: [5주차] 임베디드 시스템

프로젝트 목표

  • 사용자가 달력 화면을 중심으로 일정을 직관적으로 등록하고 확인할 수 있는 데스크톱 앱 만들기
  • 일정 추가, 수정, 삭제, 검색 같은 핵심 기능을 하나의 흐름 안에서 자연스럽게 연결하기
  • JSON/CSV 입출력과 설정 저장 기능까지 포함해 실제로 사용할 수 있는 일정관리 도구 형태로 완성하기

프로젝트 구조

이번 프로젝트는 Qt Widgets 기반으로 구성했고, 화면 구성 요소와 데이터 처리 책임을 파일 단위로 나누어 관리했다. 메인 윈도우가 전체 흐름을 조정하고, 달력/목록/설정 다이얼로그가 각각의 역할을 맡는 구조다.

파일 역할
main.cpp 애플리케이션 진입점. QApplication 생성, 스타일시트 적용, 로케일 설정, 메타타입 등록 후 메인 윈도우를 실행한다.
mainwindow.h / .cpp 이벤트 핸들러, 메인 로직, 메인 창 UI 셋업, 메뉴바 UI 셋업을 담당한다. 일정 추가/수정/삭제, 검색, 파일 저장/불러오기, 설정 반영까지 전체 흐름을 조정하는 중심 파일이다.
calendarwidget.h / .cpp 월 단위 달력 UI와 검색 입력창을 제공한다. 선택 날짜 변경, 일정 있는 날짜 강조, 날짜별 일정 요약 렌더링을 담당한다.
schedulelistwidget.h / .cpp 선택된 날짜 또는 검색 결과에 해당하는 일정 목록을 카드 형태로 보여준다. 일정 추가 다이얼로그, 수정 다이얼로그, 상세 확인 UI도 함께 처리한다.
scheduleitem.h 일정 데이터 모델 정의 파일. 일정 ID, 날짜, 시간, 종료 일시, 제목, 메모를 하나의 구조체로 묶어 앱 전체에서 공통으로 사용한다.
settingsdialog.h / .cpp 설정 다이얼로그. 달력 셀당 표시 개수나 경고 표시 여부 같은 앱 환경설정을 입력받는다.
style.qss 앱 전역 스타일 정의 파일. 카드, 버튼, 제목, 배경 등 위젯 시각 요소를 통일감 있게 꾸민다.
resources.qrc 아이콘과 이미지 같은 리소스를 Qt 리소스 시스템으로 묶어 앱 내부에서 안정적으로 참조할 수 있게 한다.

코딩 컨벤션

이번 프로젝트에서 지키려고 한 기준

  • 클래스마다 책임을 분리하고, UI 위젯 단위로 파일을 나누어 유지보수성을 높이기
  • 멤버 변수는 m_ 접두사를 사용해 지역 변수와 쉽게 구분하기
  • 이벤트 처리 함수는 handle..., UI 초기화 함수는 setup... 형태로 이름을 통일하기
  • 공용 데이터 구조는 ScheduleItem으로 통일해 위젯 간 데이터 전달 형식을 단순하게 유지하기
  • 파일 저장/불러오기, 검색, 정렬 등은 메인 윈도우에 모아 흐름을 한곳에서 추적할 수 있게 하기

아직 완벽한 팀 단위 컨벤션 수준까지 다듬은 것은 아니지만, 함수 이름과 역할 분리, 멤버 변수 표기, UI/데이터 흐름 구분 같은 기본 원칙은 계속 의식하면서 구현했다.

기능 요구사항

ID 기능 분류 기능 설명 우선순위
F-01 캘린더 뷰 월 단위 달력 표시, 이전/다음 달 이동, 연/월 표시
F-02 날짜 선택 특정 날짜 클릭 시 해당 날짜 일정 목록 로드
F-03 일정 표시 일정이 있는 날짜 강조 표시, 카드형 리스트 뷰 제공
F-04 일정 추가 날짜, 시각(시작/종료), 제목, 메모 입력을 통한 일정 생성
F-05 일정 수정/삭제 기존 일정의 정보 수정 및 삭제 기능 제공
F-06 일정 검색 제목 또는 메모 키워드 기반 검색 기능
F-07 데이터 입출력 JSON 저장/불러오기(백업), CSV 내보내기(공유)
F-08 설정 저장 QSettings를 이용한 앱 설정(경고 여부 등) 저장

시현 영상

크로뮴 기반 브라우저(엣지, 크롬 등)에서는 동영상이 재생되지 않을 수 있습니다.

이 경우 파이어폭스 또는 사파리로 다시 방문하거나, MOV 영상 재생을 지원하는 확장자를 설치하거나, 영상을 저장한 뒤 로컬에서 실행해 주세요.

사실 크롬을 삭제하고 파이어폭스로 갈아타는 것을 추천합니다.

프로젝트 결과

정리

  • 사용자가 복잡한 설정, 로그인 과정 없이 즉시 일정을 기록하고 확인할 수 있는 효율적인 도구를 제공할 수 있게 되었다.
  • 달력 뷰와 카드형 일정 목록을 연결해 날짜 선택부터 일정 확인까지의 흐름을 자연스럽게 만들었다.
  • 데이터 내보내기 기능을 통해 개인 정보 관리의 투명성을 확보했다. 내 데이터는 내가 직접 보관하고 옮길 수 있다는 점이 중요했다.

이번 프로젝트는 단순히 UI만 만든 것이 아니라, 사용자 이벤트 처리, 일정 데이터 구조 설계, 파일 입출력, 설정 저장까지 한 번에 묶어 보면서 작은 데스크톱 앱 하나가 어떻게 구성되는지 체감할 수 있었던 작업이었다.