【发布时间】:2015-06-24 21:59:24
【问题描述】:
这就是我想要做的:我有一些通过自定义小部件显示的数据。有很多这样的数据。在运行时,用户将看到所有数据的列表,他们将选择他们想要监控的数据,这将在网格中动态创建自定义小部件。我想让用户按照他们的喜好重新组织网格中的小部件,最好是通过拖放。
我能找到的最接近的方法是使用具有以下属性的 QTableWidget:setDragEnabled(True)、setDragDropOverwriteMode(False)、setDragDropMode(QtGui.QAbstractItemView.InternalMove)。使用这些属性,可以拖动单元格并将它们移动到其他单元格。
但是,这似乎只适用于附加到每个单元格的 QTableWidgetItem,而不是通过 setCellWidget() 设置的小部件。
这是一个小项目,说明了我正在尝试做的事情:https://gist.github.com/anonymous/02bbcc201316fa8f43e9
您可以看到创建的小部件(通过单击按钮)不可拖放,但是如果您编辑单元格(设置 QTableWidgetItem),这些小部件是可拖放的。看起来cellWidget部分和单元格的item部分是完全独立的,拖放逻辑只适用于item,而不适用于cell widget。
恐怕我已经知道答案了,但是……除了用 QTableView 替换 QTableWidget、使用模型并重新实现所有拖放逻辑之外,有什么方法可以做我想做的事吗?我自己?
或者也许我的方法是完全错误的。也许我可以使用其他一些小部件或 Qt 工具?我愿意接受任何和所有建议。
提前致谢!
【问题讨论】:
-
作为一种解决方法,尝试手动检测掉落并移动单元格小部件。不过,我不确定该怎么做。我认为 Qt 的模型/视图不太适合您的用例(除非您需要一些复杂的功能,例如单元格选择处理)。只需手动在 QGridLayout 中实现拖放即可。
标签: qt gridview drag-and-drop pyqt runtime