2015-02-10 110 views
0

我正在使用Qt 5.2.1,我有一个tableview,我已经启用了用户对列的排序,即他们可以拖放列标题重新排列它们。我想添加一个右键单击选项“Move to front”,在这里用户可以右键单击一个列标题,当点击该选项时,该列将被移动到表格的最左边的位置(第一列索引)。我已经将它设置在正确的位置,但是我无法弄清楚如何在列到达该位置时移动它。重新安排工作正常与拖放,但我不知道如何自动去一个给定的索引。Qt - 将表列移动到表格第一列索引

回答

1
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); 
} 
+0

是否有任何方式使用QAbstractItemModel来代替? – thnkwthprtls 2015-02-11 16:26:29