我目前有一个tableview附加到一个派生自QSortFilterProxyModel的类。现在我想知道是否有任何方法可以存储列的顺序,因为用户倾向于来回移动列。当用户更改列的顺序时,也会发出任何信号。我搜索this但我找不到任何可能在移动列时可以通知我的内容以及如何保存tablew列命令。 任何建议都将受到赞赏
答案 0 :(得分:6)
您需要使用QHeaderView
获取QTableView::horizontalHeader
个对象。您可以使用QHeaderView::saveState
和QHeaderView::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