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(), похоже, не работает.


person Chris Camacho    schedule 22.03.2010    source источник
comment
Ваш метод index() на самом деле ничего не переопределяет (QModelIndex против const QModelIndex &). Ошибка копирования-вставки?   -  person Marc Mutz - mmutz    schedule 24.06.2012


Ответы (1)


МОЙ БОГ! земля поглотит меня!

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

int r=tm->rowCount(QModelIndex())-1;
QModelIndex id=tm->index(r,ec,QModelIndex());
person Chris Camacho    schedule 22.03.2010
comment
Я постоянно забываю об этом с наборами инструментов для виджетов, поэтому я стараюсь никогда не использовать row или column по отдельности. Вместо этого я использую rowIndex (для отсчета от нуля) и, гораздо реже, rowNumber (для отсчета от единицы). - person kevinarpe; 12.05.2015
comment
'tm' должно быть моделью таблицы здесь?? - person oya163; 04.07.2016