QTableView和horizontalHeader()->restoreState()
我无法缩小此错误的范围,但是我似乎遇到以下问题:
- horizontalHeader() 的
saveState()
- 重新启动应用程序
- 修改模型,使其少一列
restoreState()
- 现在,由于某种原因, headerview 的状态完全混乱了。 我无法显示或隐藏任何新列,也无法得到合理的状态,
我知道,这不是很有描述性,但我希望其他人以前也遇到过这个问题。
I can't narrow down this bug, however I seem to have the following problem:
saveState()
of ahorizontalHeader()
- restart app
- modify model so that it has one less column
restoreState()
- Now, for some reason, the state of the headerview is totally messed up. I cannot show or hide any new columns, nor can I ever get a reasonable state back
I know, this is not very descriptive but I'm hoping others have had this problem before.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
对于 QMainWindow,
save/restoreState
采用版本号。 QTableView的restoreState()没有,所以你需要管理这种情况你自己。如果您想要在模型不匹配的情况下恢复状态,您可以选择以下选项:
For QMainWindow, the
save/restoreState
takes a version number. QTableView's restoreState() does not, so you need to manage this case yourself.If you want to restore state even if the model doesn't match, you have these options:
我个人从来没有在任何 Qt 小部件中使用
saveState()
/restoreState()
,因为它们只是返回一个二进制 blob。 我希望我的配置文件是人类可读的,具有简单的类型。 这也摆脱了此类问题。此外,
QHeaderView
还有一个顽皮的问题,即restoreState()
(或等效方法)仅在模型已经设置后才对我有用,然后一段时间。 我最终连接到 QHeaderView::sectionCountChanged() 信号并在从它调用的槽中设置状态。I personally never use
saveState()
/restoreState()
in any Qt widget, since they just return a binary blob anyway. I want my config files to be human-readable, with simple types. That also gets rid of these kind of problems.In addition,
QHeaderView
has the naughty problem thatrestoreState()
(or equivalents) only ever worked for me when the model has already been set, and then some time. I ended up connecting to theQHeaderView::sectionCountChanged()
signal and setting the state in the slot called from it.这是我使用 Boost Serialization 制作的解决方案。
它或多或少地处理新的和删除的列。 适用于我的用例。
Here is the solution I made using Boost Serialization.
It handles new and removed columns, more or less. Works for my use cases.
如果你改变模型,我预计它会损坏! 这些函数直接保存和恢复私有类成员变量,无需任何健全性检查。 尝试恢复状态然后更改模型。
I would expect it to break if you change the model! Those functions save and restore private class member variables directly without any sanity checks. Try restoring the state and then changing the model.
在遇到同样的问题后,我正在尝试修复 Qt 5.6.2 的这个问题。 看
此链接为正在审核中的 Qt 补丁,这使得 RestoreState() 能够处理以下情况:保存状态下的节(例如列)与当前视图中的节数不匹配。
I'm attempting to fix this issue for Qt 5.6.2, after hitting the same issue. See
this link for a Qt patch under review, which makes restoreState() handle the case where the number of sections (e.g. columns) in the saved state does not match the number of sections in the current view.