使用 Qt 5.2.1,我有一个 QTableView,其中我启用了用户对列的排序,即,他们可以通过标题拖放列来重新排列它们。
我想添加一个右键单击选项“移到前面”,用户可以右键单击列标题,单击该选项时,该列将移动到表格的最左边位置(第一列索引).
我已将其设置在正确到达我的功能的位置,但我无法弄清楚如何使其在到达该点后移动该列。重新排列可以通过拖放很好地工作,但我不确定如何让它自动转到给定的索引。
void SomeClass::moveColumnToFront(int column, QTableView *table) {
// I assume that you are using QStandardItemModel
QStandardItemModel *model = qobject_cast<QStandardItemModel *>(table->model());
if (model) {
QList<QStandardItem *> columndData = model->takeColumn(column);
model->insertColumn(0, columndData);
}
}
QAbstractItemModel
API 来做到这一点。但请记住,模型必须支持此功能(QStandardItemModel
支持)!如果您使用某些自定义模型,这可能不起作用。
void SomeClass::moveColumnToFront(int column, QTableView *table) {
bool success = table->model()->moveColumn(QModelIndex(), column,
QModelIndex(), 0);
}