2010-03-22 12 views
10

estoy tratando de entrar en el modo de edición en una celda específica de esta manera:QTableView: ¿cómo creo correctamente 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; 
} 

Mi modelo crea un índice de esta manera:

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

La salida de depuración se ve así:

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

Estoy bastante seguro de que el índice es inválido ya que setCurrentIndex() parece no estar funcionando.

+0

Su 'índice()' método en realidad no invalidará todas las demás ('' const QModelIndex' vs QModelIndex & '). ¿Copiar y pegar un error? –

Respuesta

13

OMG! tierra me traga!

números de las filas comienzan con la fila 0, que tenía que hacer

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

Me olvido de esto constantemente con los kits de herramientas de widgets, así que intento nunca usar 'row' o' column' solo. En cambio, uso 'rowIndex' (para base cero) y, mucho más raramente,' rowNumber' (para basado en uno). – kevinarpe

+0

'tm' debe ser el modelo de tabla aquí? – oya163

+0

yes tm es el modelo de tabla –

Cuestiones relacionadas