Qt Programming
One framework, one codebase, any platform.
Qt๊ฐ ๋ฌด์์ธ๊ฐ์?
Qt๋ ์ดํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ๋ก, Qt๋ฅผ ์ด์ฉํด ๊ฐ๋ฐํ SW๋ MS Windows, MacOS, Android, iOS, Embedded Linux, QNX, ๋ฑ์์ ๋ชจ๋ ํธํ(์ง์)๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ด์์ฒด์ ๋ณ ํธํ๋๋ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ฐ๋ก ๊ฐ๋ฐํ์ง ์์๋ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ Qt ๋ ๋จ์ํ GUI๋ฅผ ์ํ ๊ฐ๋ฐ ํ๋ ์์ํฌ๊ฐ ์๋๋๋ค. Qt๋ ๋ค์ํ ์ฐ์
๋ถ์ผ์์ ํ์๋ก ํ๋ ๋ฐฉ๋ํ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํ๋ฒ Qt๋ก ๊ฐ๋ฐ๋ SW๋ ๊ฐ ์ด์์ฒด์ ์ ์ด์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Android ๋ก App์ ๊ฐ๋ฐํ๊ธฐ ์ํด์ JAVA ์ Android SDK, NDK ๋ฅผ ์ฌ์ฉํด์ผ ํ์ง๋ง Qt ๊ฐ ์ฌ์ฉํ๋ C++์ ์ด์ฉํด ๊ฐ๋ฐํ๋ฉด Android ์์ ๋์ํ๋ App ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
Qt๋ก ํ๋ฒ ๊ฐ๋ฐํ ์ดํ๋ฆฌ์ผ์ด์
์ Desktop ์ด์์ฒด์ , ๋ชจ๋ฐ์ผ ์ด์์ฒด์ Embedded ์ด์์ฒด์ ์์ ๋ชจ๋ ์ด์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ ์ ์์๋๋ ์ธ๊ฑด๋น, ์๊ฐ์ ์ต์ํ ํ ์ ์๋ ๊ฐ๋ฐ ํ๋ ์์ํฌ ์ด๋ฉฐ C++์ ์ฌ์ฉํฉ๋๋ค. ์ฌ์ง์ด ๊ฐ๋ฐ ํ๋ ์์ํฌ์๋ ๋ค๊ตญ์ด ์ง์์ด ๊ฐ๋ฅํ ํด๊ณผ ์ค์น ๋ฐฐํฌํ(์ค์น ํ์ผ)์ ๋ง๋ค ์ ์๋ ๊ฐ๋ฐ ํด๋ ํฌํจ๋์ด ์์ต๋๋ค.
Qt๋ก ๋ฌด์์ ํ ์ ์๋์?
๋ค์ํ ์ฐ์
๋ถ์ผ์์๋ Qt๋ฅผ ์ด์ฉํด SW๋ฅผ ๊ฐ๋ฐํ ์ ์์ต๋๋ค. ์ ์์ ์๋ง์ ์๋์ฐจ OEM์์ Qt๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ TV, ๊ฐ์ , ๊ฑด์ค ๋ฑ ์ ๋ง์ ๋ถ์ผ์์ Qt๋ฅผ ์ด์ฉํด SW๋ฅผ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค.
์ค์๊ฐ OS์ธ FreeRTOS ์ด์์ฒด์ ์ ๊ฐ์ MCU ์์ค์์๋ ๋์ํ๋ ์ด์์ฒด์ ์์๋ Qt๋ก ๊ฐ๋ฐํ SWํฌํ
์ด ๊ฐ๋ฅํฉ๋๋ค.
Qt, ์ด๋ป๊ฒ ์ฌ์ฉํ๋์?
Qt๋ ๊ฐ๋ฐ IDE ํด๋ก Qt Creator IDE ํด์ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง Visual Studio IDEํด์ ์ต์ํ ๊ฐ๋ฐ์๋ค์ ์ํด์ Qt Visual Studio Add-in ์ ์ค์นํด Visual Studio IDEํด์์ Qt ๋ฅผ ์ด์ฉํด SW๋ฅผ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
์ด๋ฐ๊ฑธ ๋ฐฐ์์
Qt๋ฅผ ์ด์ฉํด ๊ฐ๋ฐํ๋ฉด ๋ค์ํ ์ด์์ฒด์ ์ ํธํ์ด ๋๋ฏ๋ก ์๊ฐ๊ณผ ๋น์ฉ์ ์ต๋ํ ์ค์ผ ์ ์์ผ๋ฉฐ ์ด ๊ต์ก ๊ณผ์ ์ ํตํด ์ฌ๋ฌ๋ถ์ Qt๋ฅผ ์ด์ฉํด SW๋ฅผ ๊ฐ๋ฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์ธ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด ๊ณผ์ ์ ์๊ฐํ๋ฉด ๋ค์ํ ์ฐ์
๋ถ์ผ์ SW๋ฅผ ๊ฐ๋ฐํ ์ ์๋ ์ญ๋์ ํฅ์ ์ํฌ ์ ์์ผ๋ฉฐ Qt ์ค๊ธ์ ์ด์์ ์ญ๋์ ๋ณด์ ํ ์ ์์ต๋๋ค.
- Qt์์ ์ ๊ณตํ๋ ๋ฐฉ๋ํ API ํ์ต
- ๋ฉํฐ ํ๋ซํผ์์ ๋์ผํ๊ฒ ๋์ํ๋ ์์ฉ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ
- Qt์์ ์ ๊ณตํ๋ ํด์ ์ฌ์ฉ ๋ฐฉ๋ฒ ํ์ต
์ด๋ฐ ๋ถ์๊ฒ ์ถ์ฒํด์
- ๋ค์ํ ํ๋ซํผ๊ณผ ํธํ๋๋ SW๋ฅผ ๊ฐ๋ฐํด์ผ ํ๋ ๋ถ
- ๋ค์ํ ์ฐ์
๋ถ์ผ์์ ํ์๋ก ํ๋ SW๋ฅผ Qt๋ฅผ ์ด์ฉํด ๊ฐ๋ฐํ๊ณ ์ ํ๋ ๋ถ
๊ฐ์๊ตฌ์ฑ ๐
์น์
1. Qt 6 ์๊ฐ์ ํน์ง
Qt ๊ฐ ์ด๋ค ํน์ง๊ณผ ์ฅ์ ์ด ์๋์ง ์ดํด๋ด
๋๋ค. ์ด๋ฒ ์น์
์์๋ ๋ณธ๊ฒฉ์ ์ธ ํ์ต์ ํ๊ธฐ ์ ์ Qt์ ๋ํด์ ์ ๋ฐ์ ์ธ ๋ด์ฉ์ ์ดํด๋ด
๋๋ค.
์น์
2. Qt 6 Framework ์ค์น
Qt๋ MS Windows, Linux, macOS, Android, iOS, QNX, FreeRTOS ๋ฑ ๋ค์ํ ํ๋ซํผ์์ ๋์ํ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ์ ์๋ Cross Platform์ ์ง์ํฉ๋๋ค. ์ด๋ฒ ์น์
์์๋ ๋ค์ํ ํ๋ซํผ์์ Qt๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ๊ณผ Qt์ ๋ฒ์ ๋ณ ์ฐจ์ด์ ์ ์์๋ณด๋ ์น์
์
๋๋ค.
์น์
3. Qt ํ๋ก๊ทธ๋๋ฐ์ ์์
Qt๋ฅผ ์ด์ฉํด ์์ ์ดํ๋ฆฌ์ผ์ด์
์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค. ์ดํ๋ฆฌ์ผ์ด์
์ผ๋ก ์ข
๋ฅ๋ก Console ๊ธฐ๋ฐ ์ดํ๋ฆฌ์ผ์ด์
(GUI๊ฐ ํ์ํ์ง ์๋ ์ดํ๋ฆฌ์ผ์ด์
), GUI ๊ธฐ๋ฐ์ ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ํ์ตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Qt์์๋ Designerํด์ ์ ๊ณตํฉ๋๋ค. Designer ํด์ ์ด์ฉํ๋ฉด ์ฝ๋ฉํ์ง ์๊ณ ๋ GUI Widget๋ค์ ์ฝ๊ฒ ์ฌ์ฉ ๋ฐ ํ๋ฉด์์ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ฒ ์น์
์์๋ Qt๋ฅผ ์ด์ฉํด ๊ฐ๋จํ ์ดํ๋ฆฌ์ผ์ด์
์ ์์ฑํ๋ ๋ฐฉ๋ฒ๊ณผ Designer ํด์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.
์น์
4. Signal ๊ณผ Slot
Signal ๊ณผ Slot ์ Qt์์ ์ฌ์ฉํ๋ ์ด๋ฒคํธ์
๋๋ค. Signal์ ์ด๋ฒคํธ์ด๊ณ Slot์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ํจ์๋ฅผ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด๋ค ๋ฒํผ์ด ์๋๋ฐ, ์ด ๋ฒํผ์ Click ํ์ ๋, Click ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค๊ณ ํฉ๋๋ค. ์ด๊ฒ์ Signal์ด๋ผ๊ณ ํฉ๋๋ค. ์ฆ ๋ฒํผ Click Signal ์ด ๋ฐ์ํ๋ค๊ณ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฒํผ์ธ ํด๋ฆญ๋๋ฉด ์ด๋ค ํจ์๊ฐ ์คํ๋๊ฒ๋ ํ๋ Slot ํจ์๋ผ๊ณ ํฉ๋๋ค. ์ด ์น์
์์๋ Signal ๊ณผ Slot์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.
์น์
5. GUI ํ๋ก๊ทธ๋๋ฐ, Widgets
Button, Combo Box, Check Box ๋ฑ์ ์์๋ฅผ Qt ์์๋ Widget์ด๋ผ๊ณ ํฉ๋๋ค. ๋ชจ๋ Widget๋ค์ QWidget์ ์์๋ฐ์ ๊ตฌํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฒํผ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ GUI๋ก QPushButton์ด ์์ต๋๋ค. ์ด ํด๋์ค ๋ํ QWidget์ ์์๋ฐ์ ๊ตฌํ๋ ํด๋์ค์
๋๋ค. ์ด๋ฒ ์น์
์์๋ Qt์์ ์ ๊ณตํ๋ Widget๋ค ์ค์์ ์์ฃผ ์ฌ์ฉํ๋ Widget์ ์ค์ฌ์ผ๋ก ๋ฐฐ์๋๋ค.
์น์
6. GUI ํ๋ก๊ทธ๋๋ฐ, Layouts
Layout์ด๋ Qt์์ ์ ๊ณตํ๋ Widget ๋ค์ ํ๋ฉด์ ๋ฐฐ์นํ๊ณ ๋์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด Widget๋ค์ ํฌ๊ธฐ๋ ๋์ ์ผ๋ก(์๋์ผ๋ก) ๋ณ๊ฒฝ๋๊ฒ ํ๊ธฐ ์ํด์ Qt ์์๋ Layout์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฒ ์น์
์์๋ Qt์์ ์ ๊ณตํ๋ Layout์ ๋ํด์ ๋ฐฐ์๋๋ค.
์น์
7. GUI ํ๋ก๊ทธ๋๋ฐ, QMainWindow
QMainWindow๋ ๋ฐ์คํฌํ์์ ์ฌ์ฉํ๋ ์๋์ฐ ํํ์ GUI๋ฅผ ๊ตฌํํ ๋ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ๋ด, Tool Bar, Main Widget ์์ญ, ์ข์ฐ ๋ฐฐ์น ์์ญ, ํ๋จ์ Status Bar ์ ๊ฐ์ด ์ ํํ๋ ํํ์ GUI๋ฅผ ๊ตฌํํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ QMainWindow์ ๋ํด์ ๋ฐฐ์๋๋ค.
์น์
8. ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
๊ณผ ์ ์ฉํ ํ์
๋ค
Qt์์ ์ ๊ณตํ๋ ํ์
๊ณผ ์ ์ฉํ ํ์
ํด๋์ค๋ฅผ ๋ฐฐ์๋๋ค. ์๋ฅผ ๋ค์ด QString์ ๋ฌธ์์ด์ ์ ์ฅํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ ํ์
ํด๋์ค์
๋๋ค. ์ด์ ๊ฐ์ด Qt์์ ์ ๊ณตํ๋ ํ์
์ค ์ ์ฉํ๊ณ ์์ฃผ ์ฌ์ฉํ ๋งํ ํ์
๊ณผ ํ์
ํด๋์ค๋ค์ ๋ฐฐ์๋๋ค.
์น์
9. Container Classes
Container ๋ Template์ ๋งํฉ๋๋ค. Qt์์๋ Container๋ก์จ QList, QHash ๋ฑ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ค์ํ Container๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฒ ์น์
์์๋ Qt์์ ์ฃผ๋ก ์ฌ์ฉํ๋ Container๋ฅผ ๋ฐฐ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ๋ฅผ ํตํด์ ๋ ์์ธํ Container Class ๋ค์ ๋ฐฐ์๋๋ค.
์น์
10. Model / View
๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ํ ๋๋ ํธ๋ฆฌ ๋ฑ ๋ค์ํ ํํ๋ก GUI์์ ๋ณด์ฌ ์ค ์ ์์ต๋๋ค. Qt์์๋ ์ด์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฝ๊ฒ GUI๋ก ๊ตฌํํ ์ ์๋๋ก Model ๊ณผ View ๋ผ๋ ๊ฐ๋
์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฒ ์น์
์์๋ Qt์์ ์ ๊ณตํ๋ Model ๊ณผ View๋ฅผ ๋ฐฐ์๋๋ค.
์น์
11. STREAM
๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค ๋ณด๋ฉด Blocking ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฝ 100MB ํ์ผ์ ์ฝ์ด ๋ค์ผ ๋ ์๊ฐ ์ดํ๋ฆฌ์ผ์ด์
์ด Blocking ๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Qt ์์๋ ์ด์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ข๋ ์ฝ๊ฒ ์ ๊ทผํ๊ธฐ ์ํด์ STREAM์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฒ ์น์
์์๋ Qt์์ ์ ๊ณตํ๋ QDataStream๊ณผ QTextStream์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.
์น์
12. ํ์ผ ์
์ถ๋ ฅ
Qt ์ ๊ณตํ๋ Class๋ค์ ์ด์ฉํด ํ์ผ์ ํธ๋ค๋ง ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค. ๊ทธ๋ฆฌ๊ณ Qt์์๋ ํ์ผ์ ํธ๋ค๋ง ํ๊ธฐ ์์์ QFile์ ์ฌ์ฉํ๋๋ฐ ์ด ํด๋์ค์์ ํ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ READ ๋๋ WRITEํ ๋ STEAM์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฒ ์น์
์์๋ QFile ๊ณผ STREAM์ ์ด์ฉํด ํ์ผ์ ํธ๋ค๋ง ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.