如何以编程方式在QTableView中选择下一行

时间:2012-03-13 03:53:26

标签: c++ qt

我正在标记QTableView子类,并用此保存其状态:

connect(this,
        SIGNAL(clicked(const QModelIndex &)),
        this,
        SLOT(clickedRowHandler(const QModelIndex &))
    );

void PlayListPlayerView::clickedRowHandler(const QModelIndex & index)
{
    int iSelectedRow = index.row();
    QString link = index.model()->index(index.row(),0, index.parent()).data(Qt::UserRole).toString();
    emit UpdateApp(1,link );
}

现在我喜欢以编程方式将选择移动到下一行(而不是用鼠标按行) 并调用clickedRowHandler(...)我该怎么做? 感谢

2 个答案:

答案 0 :(得分:14)

您已拥有当前行索引,因此请使用以下内容获取下一行的modelindex

QModelIndex next_index = table->model()->index(row + 1, 0);

然后您可以使用

将该modelindex设置为当前的modelindex
table->setCurrentIndex(next_index);

显然你需要确保你没有超越表的末尾,并且可能还有一些额外的步骤来确保选择整行,但这应该让你更接近。

答案 1 :(得分:0)

/*
 * selectNextRow() requires a row based selection model.
 * selectionMode = SingleSelection
 * selectionBehavior = SelectRows
 */

void MainWindow::selectNextRow( QTableView *view )
{
    QItemSelectionModel *selectionModel = view->selectionModel();
    int row = -1;
    if ( selectionModel->hasSelection() )
        row = selectionModel->selection().first().indexes().first().row();
    int rowcount = view->model()->rowCount();
    row = (row + 1 ) % rowcount;
    QModelIndex newIndex = view->model()->index(row, 0);
    selectionModel->select( newIndex, QItemSelectionModel::ClearAndSelect );
}