2010-03-22 5 views
10

Je suis en train de passer en mode d'édition sur une cellule spécifique comme celui-ci:QTableView: comment créer correctement un QModelIndex?

void MainWindow::on_addButton_released() { 
    tm->addRow(); 
    tableView->scrollToBottom(); 
    int ec=tm->firstWritableColumn(); 
    int r=tm->rowCount(QModelIndex()); 
    QModelIndex id = tm->index(r, ec, QModelIndex()); 
    tableView->setCurrentIndex(id); 
    tableView->edit(id); 
    qDebug() << "row:" << r << " col:" << ec << "index:" << id; 
} 

Mon modèle crée un index comme celui-ci:

QModelIndex TableModel::index(int row,int column,QModelIndex parent) const { 
    Q_UNUSED(parent); 
    return createIndex(row,column,0); 
} 

La sortie de débogage ressemble à ceci:

row: 9 col: 1 index: QModelIndex(9,1,0x0,TableModel(0xbf3f50)) 

Je suis assez sûr que l'index est en quelque sorte invalide car setCurrentIndex() ne semble pas fonctionner.

+0

Votre 'index()' méthode ne pas remplacer quoi que ce soit ('' QModelIndex' par rapport const QModelIndex & '). Copier-coller une erreur? –

Répondre

13

OMG! le sol m'avale!

numéros de ligne commencent par la ligne 0, je devais faire

int r=tm->rowCount(QModelIndex())-1; 
QModelIndex id=tm->index(r,ec,QModelIndex()); 
+2

Je l'oublie constamment avec les toolkits de widget, donc j'essaie de ne jamais utiliser 'row' ou' column' seul. Au lieu de cela, j'utilise 'rowIndex' (pour base zéro) et, plus rarement,' rowNumber' (pour one-based). – kevinarpe

+0

'tm' doit être le modèle de table ici? – oya163

+0

oui tm est le modèle de table –

Questions connexes