【问题标题】:QTableView and set pointer positionQTableView 并设置指针位置
【发布时间】:2016-06-15 06:09:58
【问题描述】:

我有一个带有一些数据的 QTableView。数据有时会发生变化,然后我需要刷新 TableView。刷新后,光标失去位置。如果它在 5 个位置(行),则刷新后超出 tableview(或在第一行)。我希望它恢复到 5,但它不起作用。

我通过“index = ui->tableView->currentIndex()”保存了最后一个位置,并通过“ui->tableView->setCurrentIndex(index)”取回了它

怎么了?

//save last cursor(row) position
QModelIndex index = ui->tableView->currentIndex();

//create basic model with my data
myModel = new MyModel();

//insert my model to sortfilterproxymodel and then sort it
QSortFilterProxyModel *sort_filter = new QSortFilterProxyModel(this);
sort_filter->setSourceModel(myModel);
sort_filter->setSortCaseSensitivity(Qt::CaseInsensitive);
sort_filter->sort(0, Qt::AscendingOrder);       //sort by name
sort_filter->sort(5, Qt::DescendingOrder);      //sort by surename

//insert my data to tableview
ui->tableView->setModel(sort_filter);
ui->tableView->hideColumn(5);

//return it back to its original position
ui->tableView->setCurrentIndex(index);

【问题讨论】:

    标签: c++ qt qtableview


    【解决方案1】:

    通过调用setModel,您更新了模型,因此您的索引可能不再有效:

    注意:模型索引应立即使用,然后丢弃。你 调用模型后不应依赖索引保持有效 更改模型结构或删除项目的功能。如果 随着时间的推移,您需要使用 QPersistentModelIndex 来保持模型索引。

    http://doc.qt.io/qt-5/qmodelindex.html#details

    【讨论】:

    • 好的,那么我怎样才能将指针设置到特定位置。因为通过 QModelIndex index = ui->tableView->currentIndex(); int 行 = index.row();我知道最后一个活跃的位置。
    • 您可以使用row() 值通过index(...) 从您的模型中获取新的QModelIndex,并将其用于setCurrentIndex()
    • 感谢您的帮助。我还是有问题。我做了这个构造QPoint point(row, 0);index = ui->tableView->indexAt(point);ui->tableView->setCurrentIndex(index);。现在选择了行,但位置错误。始终停留在第一个可见行。
    • 为什么使用QPoint?如果这样做,您需要知道要选择的行前面的所有行的高度。只需从myModel 生成一个新索引。或ui->tableView->model()->index(row, 0)(假设model() 不返回nullptr)。
    • 超级!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2013-10-05
    • 1970-01-01
    相关资源
    最近更新 更多