티스토리 뷰
QTableWidget 클래스는 편리하게 표를 표현할 수 있는 위젯 클래스로 개별 항목은 QTableWidgetItem 클래스로 제공된다. QWidget> QFrame> QAbstractScrollArea> QTableView의 계층 구조로 상속받는다. 나름의 데이터 모델이 있다면 상위 클래스인 QTableView 클래스를 사용하는 것이 적절하다. 클래스 상속 계층 구조에서도 나름 유추할 수 있듯이 표의 내용이 위젯의 크기를 벗어나면 자동적으로 스크롤바를 표시한다.
참조 링크 : https://doc.qt.io/qt-5/qtablewidget.html
https://doc.qt.io/qt-5/qtablewidgetitem.html
tableWidget = new QTableWidget(this);
tableWidget->setRowCount(0);
tableWidget->setColumnCount(tbltits.size());
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
for (int it = 0; it < tbltits.size(); it++) {
QTableWidgetItem *titm = new QTableWidgetItem(tbltits[it]);
titm->setTextAlignment((tblcenter[it]) ? Qt::AlignHCenter : Qt::AlignLeft);
tableWidget->setHorizontalHeaderItem(it, titm);
tableWidget->setColumnWidth(it,tblsizes[it]);
}
connect(tableWidget, SIGNAL(cellChanged(int, int)),
this, SLOT(OnVariablesGridCellChange(int, int)));
connect(tableWidget, SIGNAL(itemSelectionChanged()), this, SLOT(RefreshButtons()));
tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(tableWidget, SIGNAL(customContextMenuRequested(const QPoint&)),
this, SLOT(OnGridPopup(const QPoint&)));
//......
for(int ic = 0; ic < tbltits.size(); ic++) {
QTableWidgetItem *itm = tableWidget->item(iv, ic);
if (!itm) {
itm = new QTableWidgetItem("");
tableWidget->setItem(iv, ic, itm);
}
if (ic == 0) itm->setData(Qt::UserRole, QVariant::fromValue<VP_Info*>(vvals[iv]));
itm->setData(Qt::DisplayRole, elems[ic]);
}
QTableWidget을 생성하는 방식은 위의 예제처럼 클래스를 생성한 이후에 행열 크기를 지정하는 방법이 있고 생성시점에 QTableWidget(행 크기, 열 크기, 부모)와 같은 방식으로 지정할 수 있다. 표 전체적인 설정은 QTableWidget의 메서드로 수행하고 개별 셀에 대한 작업은 QTableWidgetItem의 메서드로 수행한다.
■ QTableWidget의 주요 함수와 슬롯
int rowCount()
void setRowCount(int rows) : 행 크기 조회 및 설정
int columnCount()
void setColumnCount(int columns) : 열 크기 조회 및 설정
SelectionBehavior selectionBehavior()
void setSelectionBehavior(SelectionBehavior behavior) : 선택 방식 조회 및 설정(QAbstractItemView 클래스에 속함)
QAbstractItemView::SelectItems(셀단위 선택), ::SelectRows(행단위), ::SelectColumns(열단위)
SelectionMode selectionMode()
void setSelectionMode(SelectionMode mode) : 선택 모드 조회 및 설정(QAbstractItemView 클래스에 속함)
QAbstractItemView::SingleSelection, ContiguousSelection, ExtendedSelection, MultiSelection, NoSelection
QTableWidgetItem * item(int row, int column)
void setItem(int row, int column, QTableWidgetItem *item) : 셀 오브젝트 조회 및 설정
QTableWidgetItem *horizontalHeaderItem(int column)
void setHorizontalHeaderItem(int column, QTableWidgetItem *item) : 상단 제목셀 오브젝트 조회 및 설정
지정 열이 기존 열에 없으면 자동 확장 된다.
void setHorizontalHeaderLabels(const QStringList &labels) : 스트링 리스트로 상단 제목 일괄 설정
QTableWidgetItem *verticalHeaderItem(int row)
void setVerticalHeaderItem(int row, QTableWidgetItem *item) : 좌측 제목셀 조회 및 설정
void setVerticalHeaderLabels(const QStringList &labels) : 스트링 리스트로 좌측 제목 일괄 설정
QTableWidgetItem *currentItem()
void setCurrentItem(QTableWidgetItem *item) : 현재 셀 조회 및 설정
int currentColumn()
int currentRow()
void setCurrentCell(int row, int column) : 현재 셀의 행열 조회 및 설정
void clear() : 제목을 포함한 모든 내용 삭제
void clearContents() : 제목과 틀은 남겨두고 내용만 지움
void insertColumn(int column)
void insertRow(int row) : 지정한 행/열에 빈 행/열 삽입
void removeColumn(int column)
void removeRow(int row) : 지정한 행/열 삭제
void cellChanged(int row, int column) : 셀의 내용이 바뀔 때마다 전송되는 시그널
void itemSelectionChanged() : 선택이 바뀔 때마다 전송되는 시그널
■ QTableWidgetItem의 주요 함수와 슬롯
인스턴스를 생성하면 아이콘과 텍스트를 지정할 수도 있고 예제코드처럼 setData(Qt::DisplayRole)로 지정할 수도 있다.
virtual QVariant data(int role)
void setData(int role, const QVariant &value) : 롤을 지정하여 데이터 조회 및 설정.
Qt::EditRole, Qt::DisplayRole 등 사용. 예제에서는 첫 열에 Qt::UserRole로 포인터를 저장하고 추후 작업을 편리하게 진행할 수 있도록 했다.
QString text()
void setText(const QString &text) : 표시할 셀의 텍스트 조회 및 설정. DisplayRole로 데이터 설정과 같은 효과
int row()
int column() : 행열 조회. 테이블 내에 없으면 -1 리턴
int textAlignment()
void setTextAlignment(int alignment) : 텍스트 정렬 조회 및 설정
Qt::AlignLeft, AlignRight, AlignHCenter, AlignJustify, AlignTop, AlignBottom, AlignVCenter, AlignBaseline, AlignCenter
Qt::ItemFlags flags()
void setFlags(Qt::ItemFlags flags) : 플래그 조회 및 설정. 체크, 편집, 선택 등 지정
Qt::ItemIsSelectable, ItemIsEditable, ItemIsDragEnabled, ItemIsDropEnabled, ItemIsUserCheckable, ItemIsEnabled
Qt::CheckState checkState()
void setCheckState(Qt::CheckState state) : 체크상태 조회 및 설정
QTableWidget * tableWidget() : 셀이 포함된 테이블 위젯 리턴
'C | C++' 카테고리의 다른 글
QGraphicsView 클래스(QT C++) (0) | 2024.03.13 |
---|---|
QTableView 클래스(QT C++) (0) | 2024.03.08 |
QTextEdit 클래스(QT C++) (0) | 2024.03.07 |
C++ 정규식(std::regex) 사용하기 (0) | 2024.03.07 |
QAction 클래스(QT C++) (0) | 2024.03.06 |