我正在使用带有QStandardItemModel的QTreeView,我正试图弄清楚如何使用按钮在树上上下移动项目。我可以拖放没问题,但我想做的是有一些与“向上移动”和“向下移动”功能相关的按钮。我只是无法找到关于这个问题的任何内容。模型对象似乎有一个“moveRow()”函数,但我找不到任何文档,所以我不确定它是否是我需要的。你可以给我指出正确方向的任何信息将非常感谢!
PS以下是我的QT Creator统计数据: Qt Creator 2.6.2 基于Qt 5.0.1(64位)
答案 0 :(得分:3)
你的预感是正确的。 moveRow()
是正确的呼叫功能。
要在一个父项中移动项目(毕竟它是一棵树),您需要moveRow(parent, index.row(), parent, index.row() + delta)
,其中delta
设置为1或-1,具体取决于您是向下还是向上移动,分别
如果您想允许在父母之间移动项目,那么如果项目将移动到其父项之外,您将需要额外的逻辑来确定目标父项。
请注意,如果移动按钮与要移动的项目分开,则认为设计不合理。您的代理人应在其行中显示每个项目的向上和向下箭头,以便您只需单击一下即可移动内容。当存在连续选择时,代表应合并上/下箭头以覆盖所有项目。当选择不连续时,向上/向下箭头应该消失。
使用单独的按钮,您需要两次点击:首先选择项目,然后单击向上/向下。从用户体验的角度来看,糟透了。