์๊ฐ ์ ํ์ธํด์ฃผ์ธ์!
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. QPainter Class๋ฅผ ์ด์ฉํ 2D Graphics
QPainter ํด๋์ค๋ QWidget์์์ 2D๊ทธ๋ํฝ ์์๋ฅผ ๋๋ก์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Widget ์์์ ๋ํ, ์ , ํ
์คํธ, ์ด๋ฏธ์ง๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ์ด๋ฒ ์น์
์์๋ QPainter๋ฅผ ์ด์ฉํด 2D ๊ทธ๋ํฝ ์์๋ฅผ QWidget ์์ ํ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.

์น์
2. QPainter ์ค์ ํธ, ํฌ๋ก๋งํค ์์ ์ฒ๋ฆฌ ๊ตฌํ
ํฌ๋ก๋งํค(Chromakey)๋ ๋ฐฐ๊ฒฝ์ ์์ ํน์ ์์์ผ๋ก ์ค์ ํจ์ผ๋ก์จ ๋ฐฐ๊ฒฝ์ ๋ฐ๊พธ๋ ๊ฒ์ ๋งํฉ๋๋ค. QPainter๋ก ์ฝ์ด ๋ค์ธ ์ฌ์ง์์ ๋ฐฐ๊ฒฝ์ ๋
น์์ ๋ค๋ฅธ ์ฌ์ง์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ ๊ตฌํํด ๋ด์ผ๋ก์จ QPainter์ ๋ํด์ ์ข๋ ์์ธํ ๋ฐฐ์๋๋ค.

์น์
3. ํ์ด๋จธ ๊ตฌํ
์ง์ ํ ์๊ฐ์ ๋ฐ๋ณตํ ๋ ๋ง๋ค ํน์ ํจ์๋ฅผ ํธ์ถํ ์ ์๋๋ก Qt์์๋ QTimerํด๋์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฒ ์น์
์์๋ QTimer๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.

์น์
4. Thread Programming
Qt์์๋ Thread๋ฅผ ์ข๋ ์ฝ๊ฒ ๊ตฌํํ๊ธฐ ์ํด์ ์ ์ฉํ Thread ๊ด๋ จ ํด๋์ค๋ค์ ์ ๊ณตํฉ๋๋ค. ๋ํ Re-entrancy๋ฅผ ๋ง์กฑํ๋ Thread๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ๋ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฒ ์น์
์์๋ Thread๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค. ๊ทธ๋ฆฌ๊ณ Multi Thread ์์์ Re-entrancy๋ฅผ ๋ง์กฑํ๋ Thread๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.

์น์
5. Custom Widget
Qt์์ ์ ๊ณตํ๋ Widget์ ์ด์ฉํด GUI๋ฅผ ๊ตฌ์ฑํ ์ ์๋ ๊ฒฝ์ฐ ์ง์ Widget์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ, ์ด๋ป๊ฒ Custom Widget์ ๋ง๋ค์ด์ผ ํ๋์ง ๋ฐฐ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ฐํ ๋ชจ์์ ์๋์ฐ๊ฐ ์๋๋ผ ๋ค๋ฅธ ๋ชจ์์ ์๋์ฐ๋ฅผ ๊ตฌํํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ด๋ป๊ฒ ๊ตฌํํด์ผ ํ๋์ง ๋ฐฐ์๋๋ค.


์น์
6. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ
Qt๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ์ ์๋ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด Qt์์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค API๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋์ง ์๊ด์์ด ๊ณตํต์ Qt ๋ฐ์ดํฐ๋ฒ ์ด์ค API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด MySQL, MS-SQL, Oracle, SQLite ๋ฑ๊ณผ ๊ฐ์ด ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ๊ณตํ๋ ํด๋ผ์ด์ธํธ API๋ฅผ ์ฌ์ฉํ์ง ์๊ณ Qt์์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค API๋ฅผ ์ด์ฉํ๋ฉด MySQL, MS-SQL, Oracle, SQLite ๋ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํธ๋ค๋ง ํ๋๋ฐ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฒ ์น์
์์๋ Qt์์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.

์น์
7. XML
Qt๋ XML์ ์ฝ๊ฒ ํธ๋ค๋ง ํ ์ ์๋ ๋ชจ๋์ ์ ๊ณตํฉ๋๋ค. Qt์์ ์ ๊ณตํ๋ XML๋ชจ๋์ ์ด์ฉํ๋ฉด XML์ SAX ์ DOM ๋ฐฉ์์ XML ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ํธ๋ค๋ง ํ ์ ์์ต๋๋ค. ์ด๋ฒ ์น์
์ ํตํด์ XML์ ํธ๋ค๋ง ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.

์น์
8. JSON
Qt๋ JSON(JavaScript Object Notation)์ ์ฝ๊ฒ ํธ๋ค๋ง ํ ์ ์๋ JSON๋ชจ๋์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฒ ์น์
์์๋ Qt์์ ์ ๊ณตํ๋ JSON ๋ชจ๋์ ์ด์ฉํด JSON ํฌ๋งท์ ์ฝ๊ฒ ํธ๋ค๋ง ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.

์น์
9. ๋ค๊ตญ์ด๋ฅผ ์ง์ํ๋ ์์ฉ ์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ
Qt๋ ๋ค๊ตญ์ด๋ฅผ ์ง์ํ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ์ฝ๊ฒ ๊ฐ๋ฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฒ ์น์
์์๋ Qt์์ ์ ๊ณตํ๋ ๋ค๊ตญ์ด ์ง์ ํด์ ์ด์ฉํด ๋ค๊ตญ์ด๋ฅผ ์ง์ํ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.

์น์
10. ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Qt๋ฅผ ์ด์ฉํด ๊ตฌํํ ์ดํ๋ฆฌ์ผ์ด์
์์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค. ๋ํ Qt ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.

์น์
11. D-Pointer
๋ฒ์ ์
์ ๋ฐ๋ฅด๋ ํจ๊ณผ์ ์ ์์ค์ฝ๋ ๊ด๋ฆฌ๋ฅผ ์ํด์ C์ C++์์๋ Opaque Pointer ๋๋ Opaque Type์ ์ฌ์ฉํฉ๋๋ค. Qt์์๋ Opaque Pointer๋ฅผ ์ข๋ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ์ ํ ๊ฒ์ด D-Pointer์
๋๋ค. ์ด๋ฒ ์น์
์์๋ D-Pointer๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.

์น์
12. Qt๋ฅผ ์ด์ฉํ Android ๋ชจ๋ฐ์ผ App๊ฐ๋ฐ
Qt๋ ๋ค์ํ ํ๋ซํผ์ ์ง์ํฉ๋๋ค. ์ด๋ฒ ์น์
์์๋ C++๊ณผ Qt๋ฅผ ์ด์ฉํด Android ํ๋ซํผ์์ ๋์ํ๋ App์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.

์น์
13. Network Programming
TCP/IP ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ดํ๋ฆฌ์ผ์ด์
์ ๊ตฌํ์ ์ข๋ ์ฝ๊ฒ ๊ตฌํํ๊ธฐ ์ํด์ Qt ์์๋ Qt Network ๋ชจ๋์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฒ ์น์
์์๋ Qt Network ๋ชจ๋์ ์ด์ฉํด TCP ์ UDP ํ๋กํ ์ฝ ๊ธฐ๋ฐ์ ์ดํ๋ฆฌ์ผ์ด์
์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.

์น์
14. ๊ฐ๋ฐํ SW๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํ ์ค์น ๋ฐฐํฌํ ์ ์
Qt์์๋ Qt Install Framework ๋ผ๋ ํด์ ์ ๊ณตํฉ๋๋ค. ์ด ํด์ MS Windows, Linux ๊ทธ๋ฆฌ๊ณ macOS ํ๋ซํผ์์ ์ค์นํ์ผ์ ์ฝ๊ฒ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ฒ ์น์
์์๋ Qt Install Framework๋ฅผ ์ด์ฉํด ์ค์นํ์ผ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋๋ค.
