2017-01-23 6 views
0

임의의 데이터로 채워진 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()를 호출하여 뷰에 표시되지 않은 모델에 저장된 셀 내용에 액세스합니다 (수직 섹션 이동에 따라 순서가 변경됨).

이렇게 셀 내용을 읽을 수있는 방법은 무엇입니까?

답변

1

그래서 올바르게 이해했다면 헤더를 이동하여 열의 순서를 바꾸고보기가 어떻게 보이는지 알고 싶을 것입니다. 헤더를 재정렬하면 모델에서 변경 사항이 발생하지 않습니다 (90 % 확실). 그리고 나서 모델의 데이터를 인쇄하기 시작하면 머리글을 사용하여 일부 열을 swapper/reordered하기 전에 처음의 순서대로 데이터를 볼 수 있습니다.

그러나 헤더의 순서를 유지하면서 자신의 작은 데이터 구조를 유지할 수 있으며 헤더를 재정렬 할 때 슬롯 columnMoved()이 호출되어 해당 시점에 columnViewportPosition의 위치를 ​​파악할 수 있습니다 열의 순서를 저장하는 작은 데이터 구조를 업데이트하십시오.

그래서 데이터를 인쇄하는 동안 헤더는 사용자의 데이터 구조처럼 순서대로 있다고 가정해야합니다.

당신이 찾고있는 것을 할 희망!

+0

감사합니다. 그러나, 나는 또한 가장 쉬운 방법이 있을지도 모른다라고 생각했다! – Mosi

+1

또는 자신의 구조를 유지하는 대신 columnMap에서 columnViewportPosition으로 계산 한 새 순서를 기반으로 할 때 모델에서 실제 스왑을 수행 할 수도 있습니다! 그러나 이것도 관심이 없을 수도있는 모델 업데이트를 유발하고 이러한 종류의 스왑을 수행하는 동안 QSignalBlocker로 차단해야합니다! 쉽게 찾을 수 있으면 게시하십시오.) 건배! – PRIME