์ง์๊ณต์ ์ ์๊ฐ โ๏ธ
๊ทผ๋ฌด๊ฒฝ๋ ฅ
ํ: Embedded ๋ถ์ผ Senior software developer
LG์ ์, VS์ฌ์
๋ถ IVI์ ํํ๋ซํผ/๋ชจ๋๊ฐ๋ฐ
SW๋ง์์คํธ๋ก, SW ๋ฉํ
๊ฐ์๊ฒฝ๋ ฅ
์ผ์ฑ์ ์, Qt & QML ๊ฐ์
LG์ ์, Qt & QML ๋ถ์ผ ์ฌ๋ด ๊ฐ์ฌ
ํ์ปด์์นด๋ฐ๋ฏธ Qt ๊ฐ์ ์ถ๊ฐ
๋ค์์ IT๊ธฐ์
Qt ๊ฐ์ ์ถ๊ฐ
์ ์
Qt ํ๋ก๊ทธ๋๋ฐ
Qt Quick ํ๋ก๊ทธ๋๋ฐ
Qt5 ํ๋ก๊ทธ๋๋ฐ ๊ฐ์ด๋
MeeGo ํ๋ก๊ทธ๋๋ฐ ์๋ฒฝ ๊ฐ์ด๋
Qt ์ค์ ํ๋ก๊ทธ๋๋ฐ
SW์ปค๋ฎค๋ํฐ ์ด์
Qt ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์ด์์ ( www.qt-dev.com )
Courses
Reviews
- [Level 1] Python Programming with Qt: Introduction
- [Beginner] QML Programming Part 2
- [Introduction] Qt 6 Programming Part 1
- [Beginner] QML Programming Part 2
- [Introduction] Qt 6 Programming Part 1
Posts
Q&A
Qt Resource๋ฅผ ์ฌ์ฉํ๋ ์์ ๊ตฌํ 10:15 ๊ตฌ๊ฐ ์ง์
์๋ ํ์ธ์. One๋Visual Studio Code ์์ Extention ์์ "Better Align" ์ด๋ผ๊ณ ์๋๋ฐ ์ด๊ฑธ ์ฌ์ฉํด์ ๋ง์ถ์์ต๋๋ค.(์ฌ์ง) ํน์ ๋ ๊ถ๊ธํ๊ฒ ์์ผ๋ฉด ์ธ์ ๋ ์ง๋ฌธํด ์ฃผ์ธ์.๊ฐ์ฌํฉ๋๋ค. ๊น๋์ง๋๋ฆผ.
- 1
- 2
- 18
Q&A
๋ฐ์ฝ๋ ์ดํฐ @Slot์ ๊ผญ ์จ์ค์ผ ํ๋ ๊ฑด๊ฐ์?
์๋ ํ์ธ์. @Slot์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ต์ ํ ๋ฐ ์์ ์ฑ ์ด์ ์ด ์์ต๋๋ค.(1) ์ฑ๋ฅ ์ต์ ํ@Slot์ ์ฌ์ฉํ๋ฉด C++ ์ชฝ์์ ์ง์ ์ฌ๋กฏ์ ๋ฑ๋กํ์ฌ Python์ ๋์ ๋ฐ์ธ๋ฉ๋ณด๋ค ๋น ๋ฅด๊ฒ ํธ์ถํ ์ ์์ต๋๋ค.Qt๋ ๋ด๋ถ์ ์ผ๋ก Python ํจ์๋ฅผ ์ผ๋ฐ์ ์ธ ๋์ ํธ์ถ๋ก ์ฒ๋ฆฌํ์ง๋ง, @Slot์ ์ฌ์ฉํ๋ฉด C++์ ์ ์ ์ฌ๋กฏ์ฒ๋ผ ๋์ํ์ฌ ์๋๊ฐ ํฅ์๋ฉ๋๋ค. (2) ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ต์ ํQt๋ QObject๊ณผ ๊ด๋ จ๋ ์๊ทธ๋-์ฌ๋กฏ ์ฐ๊ฒฐ์ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.@Slot์ ์ฌ์ฉํ๋ฉด Python์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC)์์ ํด๋น ์ฌ๋กฏ์ ์ ์ ํ ๊ด๋ฆฌํ ์ ์์ด ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. (3) ๋ช ์์ ํ์ ์ง์ ๊ฐ๋ฅ@Slot์ ์ฌ์ฉํ๋ฉด ํ๋ผ๋ฏธํฐ ํ์ ์ ๋ช ์ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Qt์์ ํ์ ๋ณํ์ ์๋์ผ๋ก ์ฒ๋ฆฌํด ์ฃผ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.from PySide6.QtCore import QObject, Signal, Slot class MyObject(QObject): my_signal = Signal(int) @Slot(int) def my_slot(self, value): # int ํ์ ์ง์ print(f"Received value: {value}") obj = MyObject() obj.my_signal.connect(obj.my_slot) obj.my_signal.emit(42) # "Received value: 42" ์ถ๋ ฅ๋จ@Slot(int)์ ์ฌ์ฉํ์ง ์์ผ๋ฉด, value์ ๋ํ ํ์ ์ด ์์์ ์ด๋ฏ๋ก ์๋์น ์์ ๋ฐ์ดํฐ ํ์ ๋ฌธ์ (์: str์ด ๋ค์ด์ด)๊ฐ ๋ฐ์ํ ์๋ ์์ต๋๋ค. (4) ๋ค์ค ์ฌ๋กฏ(Overloaded Slots) ์ง์๊ฐ์ ์ด๋ฆ์ ์ฌ๋กฏ์ ์ฌ๋ฌ ํ์ ์ผ๋ก ์ค๋ฒ๋ก๋ฉํ ์ ์์ต๋๋ค.class MyObject(QObject): @Slot(int) def my_slot(self, value): print(f"Integer slot called with {value}") @Slot(str) def my_slot(self, value): print(f"String slot called with {value}") obj = MyObject() obj.my_slot(10) # "Integer slot called with 10" obj.my_slot("Qt") # "String slot called with Qt"์ด์ฒ๋ผ @Slot์ ์ฌ์ฉํ๋ฉด ๊ฐ์ ์ด๋ฆ์ ํจ์๋ฅผ ๋ค๋ฅธ ํ์ ์ผ๋ก ์ค๋ฒ๋ก๋ฉํ ์ ์์ต๋๋ค.ํน์ ๋ ๊ถ๊ธํ๊ฒ ์์ผ๋ฉด ์ธ์ ์ง๋ฌธํด ์ฃผ์ธ์.๊ฐ์ฌํฉ๋๋ค. ๊น๋์ง ๋๋ฆผ.
- 1
- 2
- 29
Q&A
๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฌ๋ ค๋ฉด ์ด๋ค ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์๊น์?
์๋ ํ์ธ์. Son๋,์ฑ๋ฅ ์ ์ธ ์ธก๋ฉด์์ QPainter ์ QOpenGLWidget ๋ชจ๋ GPU๋ฅผ ์ง์ํ๋ฏ๋ก ์ฑ๋ฅ์ ์ธ ์ฅ์ ์ ๋ชจ๋ ๋์ผํฉ๋๋ค. ํ์ง๋ง ๊ทธ๋ํ์ 3D๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด QOpenGLWidget ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค. ๋ณต์กํ Chart ๋ฅผ ๊ทธ๋ ค์ผ ํ๋ ๊ฒฝ์ฐ์ด ๊ฒฝ์ฐ์๋ ๋ณดํต Qt Graphics View Framework๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ํ Qt Graphics View Framework๋ ํ๋/์ถ์ ๋ํ ์ง์ํฉ๋๋ค. QML์์๋ QPainter๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง QQuickPaintedItem ํด๋์ค๋ฅผ ์ด์ฉํ๋ฉด QPainter๋ฅผ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ํด๋์ค์ ์ฌ์ฉ๋ฐฉ๋ฒ์ "[์ด๊ธ] QMLํ๋ก๊ทธ๋๋ฐ 2ํธ" ์์ "์น์ 9. QQuickPaintedItem ํด๋์ค๋ฅผ ์ด์ฉํด QML Type ๊ตฌํ" ์ ์ฐธ์กฐํ๋ฉด ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๋ฐฉ๋ฒ์ ํ์ตํ์ค ์ ์์ต๋๋ค. ํน์ ๋ ๊ถ๊ธํ๊ฒ ์์ผ๋ฉด ์ธ์ ๋ ์ง๋ฌธํด ์ฃผ์ธ์.๊ฐ์ฌํฉ๋๋ค. ๊น๋์ง ๋๋ฆผ.
- 0
- 2
- 36
Q&A
TableModel(QAbstractTableModel) ์์ ์ง๋ฌธ์ ๋๋ค.
์๋ ํ์ธ์. TaeJoon Park ๋,PySide6์ Model/View ํ๋ ์์ํฌ์์๋ QTableView๊ฐ QAbstractTableModel์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ธฐ ์ํด ์๋์ผ๋ก ํด๋น ํจ์๋ค์ ํธ์ถํฉ๋๋ค. ๋ฐ๋ผ์ Widget ํด๋์ค์์ data, rowCount, columnCount, headerData ๋ฑ์ ๋ช ์์ ์ผ๋ก ํธ์ถํ์ง ์์๋, QTableView๊ฐ ๋ชจ๋ธ์ ์ค์ ํ๋ ๊ณผ์ ์์ ์ด ํจ์๋ค์ ๋ด๋ถ์ ์ผ๋ก ํธ์ถํฉ๋๋ค.์ค์ ํธ์ถ ์์ ๋ถ์1. rowCount(None), columnCount(None) ํธ์ถQTableView๊ฐ QAbstractTableModel์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ ๋ ๊ฐ์ฅ ๋จผ์ ํธ์ถ๋ฉ๋๋ค.rowCount()๋ ํ์ ๊ฐ์๋ฅผ ๋ฐํํ๋ฉฐ, columnCount()๋ ์ด์ ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.์ฆ, QTableView๊ฐ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์์์ผ ํ ์ด๋ธ์ ๋ ๋๋งํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋จผ์ ์คํ๋ฉ๋๋ค.2. headerData(section, orientation, role) ํธ์ถํ ์ด๋ธ์ ํค๋๋ฅผ ํ์ํ ๋ ํธ์ถ๋ฉ๋๋ค.orientation == Qt.Horizontal์ธ ๊ฒฝ์ฐ ์ปฌ๋ผ ํค๋๋ฅผ ๊ฐ์ ธ์ค๊ณ , orientation == Qt.Vertical์ธ ๊ฒฝ์ฐ ํ ํค๋๋ฅผ ๊ฐ์ ธ์ต๋๋ค.3. data(index, role) ํธ์ถ๊ฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ ๋ ํธ์ถ๋ฉ๋๋ค.index.row()์ index.column() ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํด๋น ๋ฐ์ดํฐ๋ฅผ self._data์์ ๊ฐ์ ธ์ต๋๋ค.๋๋ฒ๊น ์ ์ํ print๋ฌธ ์ถ๊ฐํจ์๋ค์ด ์ธ์ ํธ์ถ๋๋์ง ํ์ธํ๋ ค๋ฉด print()๋ฅผ ์ถ๊ฐํด์ ์คํํด๋ณด๋ฉด ํธ์ถ ์์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.class TableModel(QAbstractTableModel): def __init__(self, data): super(TableModel, self).__init__() self._data = data self._headerColumn = [] self._headerRow = [] def data(self, index, role): if role == Qt.DisplayRole: print(f"data() called: row={index.row()}, column={index.column()}") return self._data[index.row()][index.column()] def rowCount(self, index): print("rowCount() called") return len(self._data) def columnCount(self, index): print("columnCount() called") return len(self._data[0]) def setTitleColumn(self, list): self._headerColumn = list def setTitleRow(self, list): self._headerRow = list def headerData(self, section, orientation, role): if role == Qt.DisplayRole: if orientation == Qt.Horizontal: print(f"headerData() called for column={section}") return self._headerColumn[section] if orientation == Qt.Vertical: print(f"headerData() called for row={section}") return self._headerRow[section]์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ฝ์์์ ํจ์ ํธ์ถ ์์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.rowCount(), columnCount() โ headerData() โ data() ์์ผ๋ก ํธ์ถ๋ฉ๋๋ค.QTableView๊ฐ setModel()์ ํธ์ถํ๋ ์๊ฐ TableModel์ ํจ์๋ค์ด ์๋์ผ๋ก ์คํ๋ฉ๋๋ค.๋ฐ๋ผ์ Widget ํด๋์ค์์ ์ง์ ํธ์ถํ์ง ์์๋ QTableView ๋ด๋ถ์์ ํ์ํ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด ์๋์ผ๋ก ํธ์ถ๋ฉ๋๋ค.ํน์ ๋ ๊ถ๊ธํ๊ฒ ์์ผ๋ฉด ์ธ์ ๋ ์ง๋ฌธํด ์ฃผ์ธ์.๊ฐ์ฌํฉ๋๋ค. ๊น๋์ง ๋๋ฆผ.
- 1
- 2
- 56
Q&A
self๊ฐ ์๋ ๊ฑฐ์ ์๋ ๋ฒํผ
์๋ ํ์ธ์. TaeJoon Park ๋, hBtn1 = QPushButton("One")์ด ๊ฒฝ์ฐ, hBtn1์ ์ง์ญ ๋ณ์์ ๋๋ค. ์ฆ, ์ด ๋ณ์๋ฅผ ์ ์ธํ ํจ์๋ ๋ฉ์๋๊ฐ ๋๋๋ฉด ๋ ์ด์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.์ด ๋ฒํผ์ ํน์ ์์ ฏ(๋ถ๋ชจ)์ ์๋์ผ๋ก ์ถ๊ฐ๋์ง ์์ต๋๋ค.๋ถ๋ชจ ์์ ฏ์ ์ค์ ํ์ง ์์ผ๋ฉด, ์ด ๋ฒํผ์ ๋ ๋ฆฝ์ ์ธ ์์ ฏ์ด ๋๋ฉฐ, ๋ฐ๋ก layout.addWidget(hBtn1) ๊ฐ์ ์ฝ๋๋ก ์ถ๊ฐํด์ผ ํฉ๋๋ค.ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด hBtn1์ด ์๋ฉธ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.self.pbtShowDialog = QPushButton(self) ์ฌ๊ธฐ์ self๋ **ํ์ฌ ํด๋์ค์ ์ธ์คํด์ค(์: QMainWindow ๋๋ QWidget)**๋ฅผ ์๋ฏธํฉ๋๋ค.์ด ๋ฒํผ์ self(์ฆ, ๋ถ๋ชจ ์์ ฏ)์ ์์ ์์ ฏ์ด ๋ฉ๋๋ค.๋ถ๋ชจ๊ฐ ์ญ์ ๋๋ฉด, ์์ ์์ ฏ๋ ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค.self.pbtShowDialog๋ผ๋ ์ธ์คํด์ค ๋ณ์๊ฐ ๋๋ฏ๋ก, ๋ค๋ฅธ ๋ฉ์๋์์๋ ์ ๊ทผํ ์ ์์ต๋๋ค.self.pbtShowDialog.setText("Click Me") ํน์ ๋ ๊ถ๊ธํ๊ฒ ์์ผ๋ฉด ์ธ์ ๋ ์ง๋ฌธํด ์ฃผ์ธ์. ๊ฐ์ฌํฉ๋๋ค. ๊น๋์ง ๋๋ฆผ.
- 1
- 2
- 37
Q&A
Qt creator ํ๊ฒฝ๋ฌธ์
์๋ ํ์ธ์! ์๋ ํ์ธ์. ์ด ๊ฐ์์ ์ต์ ๋ฒ์ ์ 6.x ๋ฒ์ ์ ๋๋ค. ๋ฐ๋ผ์ Qt 6.x.x ๋ฒ์ ์ ์ฌ์ฉํ์๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค. Qt 5 ๋ฒ์ ์ ๋ค์ ํธํ์ด ์๋ ์ ๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ๋ฌธ์ ๋ Qt Creator๊ฐ ์ปดํ์ผ๋ฌ(g++)์ qmake๋ฅผ ์ ๋๋ก ์ฐพ์ง ๋ชปํ๊ฑฐ๋ ํ๊ฒฝ ์ค์ ์ด ์๋ชป๋์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋จ๊ณ๋ณ ๊ฐ์ด๋ ์ ๋๋ค.1. Qt Creator์์ ์ปดํ์ผ๋ฌ ์ค์ ํ์ธQt Creator๋ฅผ ์คํํฉ๋๋ค.Tools -> Options -> Kits ๋ฉ๋ด๋ก ์ด๋ํฉ๋๋ค.Kits ํญ์์ ์ฌ์ฉ ์ค์ธ Kit๋ฅผ ํ์ธํ๊ณ , ์๋ ์ฌํญ์ ์ ๊ฒํ์ธ์.Compiler: g++ ์ปดํ์ผ๋ฌ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์ด ์๋์ง ํ์ธํฉ๋๋ค. ์๋ค๋ฉด, ์๋์ ๋ฐฉ๋ฒ์ผ๋ก ์ถ๊ฐํ์ธ์.Debugger: ๋๋ฒ๊ฑฐ๊ฐ ์ค์ ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.Qt Version: ์ฌ์ฉํ๋ ค๋ Qt ๋ฒ์ ์ด ์ ๋๋ก ๋ฑ๋ก๋์๋์ง ํ์ธํฉ๋๋ค.2. g++ ์ปดํ์ผ๋ฌ ๊ฒฝ๋ก ํ์ธg++ ์ปดํ์ผ๋ฌ๊ฐ ์ค์น๋์ด ์๊ณ , Qt Creator์์ ์ด๋ฅผ ์ธ์ํ๊ณ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.g++ ์ค์น ๊ฒฝ๋ก ํ์ธ:Qt ์ค์น ๋๋ ํฐ๋ฆฌ ์์ mingw ํด๋์ g++.exe ํ์ผ์ด ์๋์ง ํ์ธํฉ๋๋ค.๊ธฐ๋ณธ ๊ฒฝ๋ก: C:\Qt\Qt5.11.3\Tools\mingw53_32\bin\g++.exe์ปดํ์ผ๋ฌ๋ฅผ ์๋์ผ๋ก ์ถ๊ฐ:Tools -> Options -> Compilers ํญ์ผ๋ก ์ด๋ํฉ๋๋ค.**Add -> MinGW**๋ฅผ ์ ํํ๊ณ , g++์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.3. Qt ๋ฒ์ ์ค์ ํ์ธQt Creator๊ฐ ์ฌ๋ฐ๋ฅธ Qt ๋ฒ์ ์ ์ฐพ์ง ๋ชปํ๋ฉด qmake ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.**Tools -> Options -> Qt Versions**๋ก ์ด๋ํฉ๋๋ค.Qt ๋ฒ์ ์ด ์ ๋๋ก ๋ฑ๋ก๋์ด ์๋์ง ํ์ธํ๊ณ , ๋๋ฝ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ์ถ๊ฐํฉ๋๋ค:Add๋ฅผ ๋๋ฌ qmake ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.์: C:\Qt\Qt5.11.3\5.11.3\mingw53_32\bin\qmake.exeKit์์ ํด๋น Qt ๋ฒ์ ์ ์ ํํ๋์ง ํ์ธํฉ๋๋ค.4. ํ๊ฒฝ ๋ณ์ ํ์ธQt Creator๊ฐ g++์ qmake๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ํ๊ฒฝ ๋ณ์๋ ์ ๋๋ก ์ค์ ๋์ด์ผ ํฉ๋๋ค.ํ๊ฒฝ ๋ณ์์ PATH ์ถ๊ฐ:C:\Qt\Qt5.11.3\Tools\mingw53_32\binC:\Qt\Qt5.11.3\5.11.3\mingw53_32\bin์์คํ ์ฌ๋ถํ ํ ๋ค์ ์คํํด ๋ณด์ธ์.5. ๊ฐ๋จํ ์์ ํ๋ก์ ํธ ๋ค์ ์์ฑ๊ธฐ์กด ํ๋ก์ ํธ๊ฐ ๊นจ์ก์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋, ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํด์ ํ ์คํธํด ๋ณด์ธ์.์ ํ๋ก์ ํธ ์์ฑ:**File -> New File or Project -> Qt Console Application**์ ์ ํํฉ๋๋ค.์ ํ๋ก์ ํธ ์์ฑ ํ, main.cpp ํ์ผ์ ์๋์ ๊ฐ์ด ์์ ํฉ๋๋ค:#include int main() { std::cout ๋ณต์ฌํธ์ง#include int main() { std::cout Build and Run ๋ฒํผ์ ๋๋ฌ ์คํํด ๋ณด์ธ์.6. ๋ฌธ์ ๊ฐ ์ง์๋ ๊ฒฝ์ฐ ๋ก๊ทธ ํ์ธ์ปดํ์ผ ์๋ฌ ๋ฉ์์ง์ ๋ก๊ทธ๋ฅผ ๋ค์ ํ์ธํด๋ณด์ธ์.์ฃผ์ ๋ก๊ทธ:Compile Output ํญIssues ํญ
- 1
- 2
- 383
Q&A
์ ํธํ๋ GUI ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ด ์์ผ์ ๊ฐ์
์๋ ํ์ธ์. Nole ๋,ํ๋ก์ ํธ๊ฐ Desktop(MS Windows, Linux, MacOS)๊ณผ ๊ฐ์ PC์์ ๋์ํ๋ ๊ฒ์ด๋ผ๋ฉด ๋ณต์กํ GUI๊ฐ ํ์ํ๋ฏ๋ก Qt Designer ๋๋ ํ๋์ฝ๋ฉ(Qt Designer ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ QWidget ์ ์ง์ ์์ค์ฝ๋๋ก ์์ฑ)ํ๋ ๋ฐฉ์์ผ๋ก ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. Embedded ์ ๊ฐ์ด ํฐ์น๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํ๋ คํ ์ ๋๋ฉ์ด์ UI๋ฅผ ์ ์ฉํ Modernํ UI๋ฅผ ์ฌ์ฉํ๋ค๋ฉดQML์ ์ ํธํฉ๋๋ค. ๋ฐ๋ผ์ ์ ๋ ์ฃผ๋ก ์์ ๊ฐ์ด ํ๋ก์ ํธ ํน์ฑ์ ๋ฐ๋ผ QML์ ์ฌ์ฉํ ์ง ๊ทธ๋ ์ง ์์์ง ์ ํํฉ๋๋ค.ํน์๋ ๊ถ๊ธํ๊ฒ ์์ผ๋ฉด ์ธ์ ๋ ์ง๋ฌธํด ์ฃผ์ธ์.๊ฐ์ฌํฉ๋๋ค. ๊น๋์ง ๋๋ฆผ.
- 1
- 2
- 70
Q&A
๊ฐ์ฅ ํฐ ์์ ฏ์ ๋๋น์ ๊ฐ์ ๋๋น๋ฅผ ์ฐจ์งํ๋ 2์ด ์ง๋ฆฌ ์ปฌ๋ผ
์๋ ํ์ธ์. monkey-k 777๋, QGridLayout์์ ์์ ฏ๋ค์ด ๊ฐ์ ๋๋น๋ฅผ ๊ฐ์ง๋ฉด์ ์๋์ฐ ํฌ๊ธฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ํฌ๊ธฐ๊ฐ ๋ณํ์ง ์๋๋ก ์ค์ ํ๋ ค๋ฉด, QWidget์ setSizePolicy() ๋ฉ์๋๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค. QSizePolicy๋ฅผ ์ฌ์ฉํ์ฌ ์์ ฏ์ ํฌ๊ธฐ ์กฐ์ ๋ฐฉ์(ํ์ฅ/์ถ์)์ ์ ์ดํ ์ ์์ต๋๋ค. ๋ํ, QGridLayout ๋ด์์ ๊ฐ์ฅ ๋์ ์์ ฏ์ ๋ง์ถฐ ๋ค๋ฅธ ์์ ฏ๋ค์ ๋๋น๋ฅผ ๋ง์ถ๋ ค๋ฉด QGridLayout์ setColumnStretch() ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.from PySide6.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton, QSizePolicy app = QApplication([]) window = QWidget() layout = QGridLayout(window) # ์์ ฏ ์์ฑ button1 = QPushButton("Button 1") button2 = QPushButton("Button 2") button3 = QPushButton("Button 3") button4 = QPushButton("Button 4") # ์์ ฏ์ ์ฌ์ด์ฆ ์ ์ฑ ์ 'Fixed'๋ก ์ค์ ํ์ฌ ํฌ๊ธฐ๊ฐ ๋ณํ์ง ์๋๋ก ์ค์ button1.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) button2.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) button3.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) button4.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) # QGridLayout์ ์์ ฏ ์ถ๊ฐ layout.addWidget(button1, 0, 0) layout.addWidget(button2, 0, 1) layout.addWidget(button3, 1, 0) layout.addWidget(button4, 1, 1) # ๋ ๋ฒ์งธ ์ด์ ์ด ํฌ๊ธฐ ๋น์จ์ 1๋ก ์ค์ layout.setColumnStretch(0, 1) layout.setColumnStretch(1, 1) window.show() app.exec()์ฌ๊ธฐ์ QSizePolicy.Fixed๋ ์์ ฏ์ ํฌ๊ธฐ๋ฅผ ๊ณ ์ ์์ผ์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ setColumnStretch()๋ฅผ ์ฌ์ฉํด ๋ ์ด์ ํฌ๊ธฐ๋ฅผ ๋์ผํ๊ฒ ๋ง์ถ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ ์ฉํ๋ฉด, ์๋์ฐ ํฌ๊ธฐ์ ์๊ด์์ด ์์ ฏ๋ค์ ๋๋น๊ฐ ์ผ์ ํ๊ฒ ์ ์ง๋ฉ๋๋ค. ํ์์ ๋ฐ๋ผ ์์ ฏ๋ค์ ํฌ๊ธฐ๋ ๋ ์ด์์์ ๋ ์กฐ์ ํ ์ ์์ต๋๋ค.ํน์ ๋ ๊ถ๊ธํ๊ฒ ์์ผ๋ฉด ์ธ์ ๋ ์ง๋ฌธํด์ฃผ์ธ์.๊ฐ์ฌํฉ๋๋ค. ๊น๋์ง๋๋ฆผ.
- 1
- 2
- 78
Q&A
Qt6 ์ฐ๋ถํฌ์์ ์ปดํ์ผ ์๋จ.
์ค์น๊ฐ ์๋๋ ๊ฒฝ์ฐ๋ ์ค์น ์ ์ค์น ํญ๋ชฉ(Kit)์ ์ ํํ์ง ์์ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.ํน์ ๋ ๊ถ๊ธํ๊ฒ ์์ผ๋ฉด ์ธ์ ๋ ์ง๋ฌธํด ์ฃผ์ธ์.๊ฐ์ฌํฉ๋๋ค. ๊น๋์ง ๋๋ฆผ.
- 1
- 2
- 68
Q&A
QML๋ก ๋ง๋ ํ์ผ๋ ๋๊ฐ์ด ์ค์นํ ์ ์ํ๋ฉด ๋๋์?
๋ค ๊ทธ๋ ๊ฒ ํ์๋ฉด ๋ฉ๋๋ค. ^^
- 0
- 2
- 72