2012-03-24 4 views
0

füge ich addFile Funktion in meinem Tablemodel Klasse haben, die am Ende einen neuen Datensatz einfügt.QAbstactTableModel oben

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(); 
} 

Diese Funktion funktioniert gut, aber anstatt am Ende des Datensatzes anzuhängen, möchte ich es an der Spitze einfügen. Irgendwelche Hinweise, wie ich meine bestehende Funktion aktualisieren kann?

Ich habe bereits versucht, einige Kombinationen, aber es gibt kein Glück.

+0

Haben Sie gerade ist das Element am Anfang eingefügt werden soll angezeigt werden oder möchten Sie die Liste wollen auch so bestellt werden? – Gangadhar

+0

beide - da der bestehende Code beide behandelt – Hiren

Antwort

0

Vielen Dank an alle für die Beantwortung. Ich habe die Lösung von meinem eigenen gefunden:

Im Fall, wenn jemand interessiert

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

Für die Anzeige können Sie delegates versuchen, wie in dem Link erklärt (ich habe das Beispiel aber nicht ausprobiert). Es wird der Community helfen, wenn Sie Ihre Beobachtungen hinzufügen können.

3

Es gibt zwei Dinge, die Sie tun müssen. Zuerst wird der Aufruf von beginInsertRows angepasst. Denn hier sagen wir dem Modell, dass wir Zeilen hinzufügen, wohin sie gehen und wie viele wir hinzufügen. Hier ist die Methode Beschreibung:

Leere QAbstractItemModel :: beginInsertRows (const QModelIndex & Eltern, int erste, int letzte)

Also in Ihrem Fall, da Sie eine Zeile in der ersten hinzufügen möchten index und nur eine Zeile übergeben wir 0 als Index des ersten Eintrags und 0 als Index des letzten Eintrags, den wir hinzufügen (weil wir natürlich nur einen Eintrag hinzufügen).

beginInsertRows(modelIndex(), 0, 0); 

Als nächstes haben wir die Daten für den Artikel zur Verfügung zu stellen. Ich nehme an, dass 'Liste' eine QList ist (wenn es nicht wahrscheinlich ähnlich ist). Also wollen wir die 'insert'-Methode aufrufen.

list.insert(0, item); 

Und das sollte es sein.