问题 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() 似乎没有工作。


5650
2018-03-22 13:19


起源

你的 index() 方法实际上没有覆盖任何东西(QModelIndex 与 const QModelIndex &)。复制粘贴错误? - Marc Mutz - mmutz


答案:


我的天啊!地把我吞了!

行号从第0行开始,我需要这样做

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

14
2018-03-22 13:30



我经常使用widget工具包忘记这一点,所以我尝试永远不要使用 row 要么 column 单独。相反,我使用 rowIndex (从零开始),更少见, rowNumber (基于一个)。 - kevinarpe
'tm'必须是这里的桌子型号吗? - oya163
是的tm是表模型 - Chris Camacho