2012-03-24 4 views
0

끝에 새 레코드를 삽입하는 내 TableModel 클래스에 addFile 함수가 있습니다.QAbstactTableModel 상단에 삽입

void TableModel::addFile(const QString &path) 
{ 
    beginInsertRows(QModelIndex(), list.size(),list.size()); 
    TableItem item; 
    item.filename = path; 
    QFile file(path); 
    item.size = file.size(); 
    item.status = StatusNew; 
    list << item; 
    endInsertRows(); 
} 

이 함수는 정상적으로 작동하지만 끝에 레코드를 추가하는 대신 상단에 삽입하고 싶습니다. 내 기존 기능을 업데이트하는 방법에 대한 지침이 있습니까?

나는 이미 몇 가지 조합을 시도했지만 운이 없습니다.

+0

방금 ​​시작 부분에 삽입 된 항목을 표시 할하거나 목록이 너무 그런 식으로 주문 싶은가? – Gangadhar

+0

둘 다 - 기존 코드가 – Hiren

답변

0

누구나 답장을 보내 주셔서 감사합니다. 난 내 자신에 의해 해결책을 발견 :

경우

사람이 관심이 있다면

void TableModel::addFile(const QString &path) 
{ 
    beginInsertRows(QModelIndex(), list.size(), list.size()); 
    TableItem item; 
    item.filename = path; 
    QFile file(path); 
    item.size = file.size(); 
    item.status = StatusNew; 
    list << item; // Why Assign first? Maybe not required 
    for (int i = list.size() - 1; i > 0; i--) 
    { 
     list[i] = list[i-1]; 
    } 
    list[0] = item; // set newly added item at the top 
    endInsertRows(); 
} 
0

표시를 위해 delegates을 링크에 설명 된대로 시도해 볼 수 있습니다 (예제는 시도하지 않았습니다). 관측을 추가 할 수 있다면 커뮤니티를 도울 것입니다.

3

해야 할 두 가지 사항이 있습니다. 첫 번째는 beginInsertRows에 대한 호출을 조정하는 것입니다. 모델을 말하면서 행을 추가하고, 행을 추가하고, 추가 할 행을 추가 할 것입니다. 여기에 방법의 설명입니다

당신이 처음에 행을 추가 할 수 있기 때문에

무효 QAbstractItemModel :: beginInsertRows 귀하의 경우 그래서

(CONST는 & 부모, 첫째 INT, 마지막 INT를 QModelIndex) 인덱스와 단 하나의 행, 우리는 0을 첫 번째 항목의 인덱스로 전달하고 0은 추가하는 마지막 항목의 인덱스입니다 (당연히 하나의 항목 만 추가하기 때문에).

beginInsertRows(modelIndex(), 0, 0); 

다음으로 항목에 대한 데이터를 제공해야합니다. 나는 '목록'이 QList라고 가정합니다 (그렇지 않은 경우 아마도 유사 할 것입니다). 그래서 우리는 'insert'메서드를 호출하려고합니다.

list.insert(0, item); 

그리고 그렇게해야합니다.