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

Raj*_*war 5 c++ qt qtableview qtgui

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

Pav*_*hov 6

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


lpa*_*app 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