임의의 데이터로 채워진 QTableView가 있습니다. 사용자는 verticalHeader를 움직여서 테이블의 행을 재정렬 할 수 있습니다.저장된 순서대로 QTableView 행 내용을 읽지 않습니다.
#include <QApplication>
#include <QTableWidget>
#include <QDebug>
#include <QVBoxLayout>
#include <QPushButton>
#include <QHeaderView>
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
QWidget base;
QTableWidget* tablWid = new QTableWidget(&base);
tablWid->verticalHeader()->setSectionsMovable(true);
tablWid->verticalHeader()->setDragEnabled(true);
//////////////////////////////////////////////////////////////////////////
// Fill the model with some data
tablWid->model()->insertColumn(0);
tablWid->model()->insertRows(0,10);
for (int i = 0; i < 10; ++i)
tablWid->model()->setData(tablWid->model()->index(i, 0), "Item " + QString::number(i));
//////////////////////////////////////////////////////////////////////////
QPushButton* dumpButton = new QPushButton("Dump Model", &base);
QObject::connect(dumpButton, &QPushButton::clicked, [tablWid]()->void {
for (int j = 0; j < tablWid->model()->rowCount();++j){
qDebug() << tablWid->model()->index(j, 0).data().toString();
}
});
QVBoxLayout* baseLay = new QVBoxLayout(&base);
baseLay->addWidget(tablWid);
baseLay->addWidget(dumpButton);
base.show();
return a.exec();
}
우리는 (모델에 저장되지 뷰에서 볼 때)에 QTableView에서 볼 수 있습니다와 같은 순서로 셀 내용을 읽을 수 : 다음은 샘플 코드입니다. 현재 model-> data()를 호출하여 뷰에 표시되지 않은 모델에 저장된 셀 내용에 액세스합니다 (수직 섹션 이동에 따라 순서가 변경됨).
이렇게 셀 내용을 읽을 수있는 방법은 무엇입니까?
감사합니다. 그러나, 나는 또한 가장 쉬운 방법이 있을지도 모른다라고 생각했다! – Mosi
또는 자신의 구조를 유지하는 대신 columnMap에서 columnViewportPosition으로 계산 한 새 순서를 기반으로 할 때 모델에서 실제 스왑을 수행 할 수도 있습니다! 그러나 이것도 관심이 없을 수도있는 모델 업데이트를 유발하고 이러한 종류의 스왑을 수행하는 동안 QSignalBlocker로 차단해야합니다! 쉽게 찾을 수 있으면 게시하십시오.) 건배! – PRIME