irgendwie komme ich mit dem QTableModel nicht wirklich zurecht. Ich schlage mich mit meinem Problem nun schon Wochen und jetzt muss ich mir einfach mal Hilfe suchen...
Ich habe eine Tabelle mit x+1 Zeilen. Die x Zeilen sind bereits belegt und unterhalb dieser gibt es eine zusätzliche leere Zeile. Ich möchte nun das, wenn ich in diese leeren Zeile etwas eingebe, eine neue leere Zeile angehängt wird.
Soweit funktioniert mein Programm auch, allerdings nun das Problem: Sobald ich aber mit Hilfe der Tab Taste die Spalte Wechsel, wird (wie gewollt) eine neue Zeile angehängt, aber der Fokus geht über auf diese neue Zeile. Bearbeite ich also Zeile 1, Spalte 1 und drücke Tab befindet sich der FoKus (Editor-Modus) auf Zeile 2, Spalte 2 (und nicht Zeile1, Spalte 2).
Ich denke es liegt an einer fehlerhaften Benutzung von beginInsertRows()/endInsertRows() - aber ich habe in diesem Zusammenhang auch schon sehr viel probiert und keine Lösung gefunden.
Code: Alles auswählen
int rowCount(const QModelIndex &parent) const {
return m_account->count()+1;
}
bool setData(const QModelIndex &index, const QVariant &value, int role) {
if(!index.isValid()) return false;
if(!(role == Qt::EditRole || role == Qt::DisplayRole)) return false;
//...
if(index.row()>=m_account->count()) {
insertRow(index.row(), entry);
} else {
//...
}
return true;
}
bool insertRow(int row, const Posting *posting) {
beginInsertRows(QModelIndex(), row, row);
m_account->insert(row, posting);
endInsertRows();
return true;
}
//...
MfG,
Hilefoks
EDIT: Attachment hinzugefügt mit kleinen Beispielprogramm. Ist vielleicht einfacher anhand von echten Code dieses Problem zu lösen.