有没有办法保存列的顺序?

时间:2013-09-28 00:53:40

标签: c++ qt qtableview qtgui

我目前有一个tableview附加到一个派生自QSortFilterProxyModel的类。现在我想知道是否有任何方法可以存储列的顺序,因为用户倾向于来回移动列。当用户更改列的顺序时,也会发出任何信号。我搜索this但我找不到任何可能在移动列时可以通知我的内容以及如何保存tablew列命令。 任何建议都将受到赞赏

2 个答案:

答案 0 :(得分:6)

您需要使用QHeaderView获取QTableView::horizontalHeader个对象。您可以使用QHeaderView::saveStateQHeaderView::restoreState来保存列的状态。您可以使用QHeaderView::sectionMoved信号来检测列移动。

答案 1 :(得分:5)

您在文档中找不到相关信号的原因是因为您正在检查大约6 - 7年的文档。也就是说,它是Qt 4.1。有问题的信号已在版本4.6中添加到Qt。

QAbstractItemModel最近有这个信号:

  

void QAbstractItemModel :: columnsMoved(const QModelIndex& sourceParent,int sourceStart,int sourceEnd,const QModelIndex& destinationParent,int destinationColumn)[signal]

     

在模型中移动列后发出此信号。在给定的sourceParent项目下,sourceStart和sourceEnd之间的项目已从destinationColumn列开始移动到destinationParent。

     

注意:连接到此信号的组件使用它来适应模型尺寸的变化。它只能由QAbstractItemModel实现发出,不能在子类代码中显式发出。

     

此功能是在QtCore 4.6中引入的。

这看起来像你在寻找什么。有关详细信息,请参阅文档:

http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel.html#columnsMoved

此外,不要忘记在一天结束时您实际需要QAbstractTableModel的事实。

如果你真的希望,你也可以抓住这个信号:

  

void QHeaderView :: sectionMoved(int logicalIndex,int oldVisualIndex,int newVisualIndex)[signal]

     

移动部分时会发出此信号。该部分的逻辑索引由logicalIndex指定,旧索引由oldVisualIndex指定,新索引位置由newVisualIndex指定。

有关详细信息,请参阅文档:

http://qt-project.org/doc/qt-5.1/qtwidgets/qheaderview.html#sectionMoved