티스토리 뷰

C | C++

QTableWidget 클래스(QT C++)

야라바 2024. 3. 8. 22:31
728x90

 

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() : 셀이 포함된 테이블 위젯 리턴

 

 

 

 

 

 

 

728x90

'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