QTableModel - insertRows() - Fokus bei Tab-Taste [gelöst]

Alles rund um die Programmierung mit Qt
Antworten
hilefoks
Beiträge: 144
Registriert: 13. März 2008 16:09

QTableModel - insertRows() - Fokus bei Tab-Taste [gelöst]

Beitrag von hilefoks »

Moin,

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;
}
//...
Vielen Dank!

MfG,
Hilefoks

EDIT: Attachment hinzugefügt mit kleinen Beispielprogramm. Ist vielleicht einfacher anhand von echten Code dieses Problem zu lösen.
Dateianhänge
tabledemo.tar.gz
Beispielprogramm das diesen "Bug" enthält.
(1.81 KiB) 144-mal heruntergeladen
Zuletzt geändert von hilefoks am 14. März 2008 13:19, insgesamt 1-mal geändert.
hilefoks
Beiträge: 144
Registriert: 13. März 2008 16:09

Beitrag von hilefoks »

Fehler gefunden. :oops:

Mein Fehler war tatsächlich beginInsertRows() die falschen werde zu übergeben.

D.h. anhand des Beispielprogramms: In der Datei tablemodel.cpp in Zeile 76 muss stehen:

Code: Alles auswählen

beginInsertRows(QModelIndex(), rowCount(), rowCount());
und nicht:

Code: Alles auswählen

beginInsertRows(QModelIndex(), index.row(), index.row());

MfG,
Hilefoks
Antworten