2014-10-16 16 views
3

saveState/restoreState에 문제가 있습니다. QHeaderView입니다. 내 응용 프로그램에 여러 QTableViews 있습니다. QTableView는 QHeaderView 설정을 저장하고 복원하지만 일부 QTableViews의 경우 이동 된 섹션 순서를 ini 파일에 저장된 beeing에서 제외하고자합니다.이동 된 열 순서를 QHeaderView에서 제외합니다. saveState/restoreState

즉, savestate은 정렬 된 열, 정렬 표시기, 열 너비를 저장해야하지만 사용자가 열을 이동 한 경우에는 저장하지 말아야합니다.

이동 된 열을 저장하지 않을 방법이 있습니까?

감사합니다.

감사합니다, 마니

답변

0

는이 작업을 수행하는 쉬운 방법이 없습니다. 다음과 같은 것을 제안합니다 :

벡터를 사용하여 이동 된 머리글 logicalIndexes을 저장하십시오. QHeaderView 다른 sectionMoved 있기 때문에 그것을 필요하므로

connect(ui->tableView->horizontalHeader(),static_cast<void (QHeaderView::*)(int,int,int)>(&QHeaderView::sectionMoved),[=](int logicalIndex, int oldVisualIndex, int newVisualIndex) 
{//with lambda 
    //you can also provide shecking is current logicalIdnex already exist in vector 
    last.push_back(logicalIndex); 
}); 

구문 너무 복잡하고 추한 :

QVector<int> last; 

사용 sectionMoved 신호 검출 및 이동 벡터에 logicalIndex를 저장한다. 새로운 문법을 모르는 경우, 기존 사용

connect(ui->tableView->horizontalHeader(), SIGNAL(sectionMoved(int,int,int)), this, SLOT(yourSlot(int,int,int))); 

그러나이 yourSlot(int,int,int)을 만들고이 슬롯에 last.push_back(logicalIndex);을한다. 새로운 구문과 람다를 사용하려는 경우

QByteArray array; 
for(int i = 0; i < last.size(); i++) 
{ 
    ui->tableView->horizontalHeader()->hideSection(last.at(i)); 
} 
array = ui->tableView->horizontalHeader()->saveState(); 

이 프로 파일에 CONFIG += c++11을 추가

당신이 saveState을 원하는

, 당신은 벡터에 저장하고 저장 logicalIndex 모든 섹션을 숨 깁니다.