2010-03-22 5 views
10

Я пытаюсь войти в режим редактирования на конкретной ячейке, например так:QTableView: как правильно создать 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; 
} 

Моя модель создает индекс, как это:

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

Выход отладки выглядит следующим образом:

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

Я уверен, что индекс как-то недействителен, так как setCurrentIndex() не работает.

+0

Вашего 'индекс()' метод фактически не переопределяет ничего ('' QModelIndex' против Const QModelIndex & '). Ошибка копирования-вставки? –

ответ

13

OMG! земля проглотить меня!

номера строк начинается с строкой 0, что мне нужно сделать

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

Я забываю об этом постоянно с помощью наборов виджетов, поэтому я стараюсь никогда не использовать 'row' или' column'. Вместо этого я использую 'rowIndex' (для нулевого) и, что гораздо реже,' rowNumber' (для одного). – kevinarpe

+0

'tm' должен быть моделью таблицы здесь? – oya163

+0

да tm - модель таблицы –