Qt 在 QTableView 单元格中设置自定义小部件
Qt set a custom widget inside a QTableView cell
我想将自定义小部件放入 QTableView
的单元格中。 Widget 可以是 QPushButton
、复选框或其他东西。我尝试了以下方法,但没有一个让我满意:
- 使用委托。此策略可以绘制小部件,但不能是自定义小部件,并且不能交互。
- 使用
QTableView::setIndexWidget()
。使用此策略,自定义小部件完全且绝对地覆盖单元格,绑定到 QTableView
的委托不起作用,这意味着 a-double-click() 不会对单元格进行编辑操作。
请注意,该功能是独立的,就像一个插件。所以我不能做以下事情。
- 继承自
QTableView
。我只能获得与 QTableView
绑定的指针变量----只有 QTableView
. 的对象
- 继承自任意模型。模型由其他用户控制,程序员编写模型不应该也不能只使用我自定义的模型。
这个问题真的很复杂,太多的约束限制了设计。
如果您想使用 model/view 来包含您的小部件的数据,则不能在没有委托的情况下执行此操作。更糟糕的是,如果您无论如何都尝试这样做,当元素数量非常多时,您的程序会显着变慢,因为每个小部件都将参与事件循环。这不是你想要的。您希望仅 用户可见的小部件。
正在考虑 以获得更多解释。
感谢大家对这个问题的贡献,我找到了解决这个问题的方法。
解决为"original thought",就是在tableView上画一个QToolButton,使用QModelIndex。通过 QModelIndex,我可以获得可以绘制任何 QWidget 的几何位置。但是,这个方法真的很复杂,因为我必须维护QModelIndex的变化,比如removeColumns和insertColumns。
另一个问题是我必须区分隐藏和删除列或行。我想我应该 post 另一个新问题来寻求帮助。
再次感谢。
我想将自定义小部件放入 QTableView
的单元格中。 Widget 可以是 QPushButton
、复选框或其他东西。我尝试了以下方法,但没有一个让我满意:
- 使用委托。此策略可以绘制小部件,但不能是自定义小部件,并且不能交互。
- 使用
QTableView::setIndexWidget()
。使用此策略,自定义小部件完全且绝对地覆盖单元格,绑定到QTableView
的委托不起作用,这意味着 a-double-click() 不会对单元格进行编辑操作。
请注意,该功能是独立的,就像一个插件。所以我不能做以下事情。
- 继承自
QTableView
。我只能获得与QTableView
绑定的指针变量----只有QTableView
. 的对象
- 继承自任意模型。模型由其他用户控制,程序员编写模型不应该也不能只使用我自定义的模型。
这个问题真的很复杂,太多的约束限制了设计。
如果您想使用 model/view 来包含您的小部件的数据,则不能在没有委托的情况下执行此操作。更糟糕的是,如果您无论如何都尝试这样做,当元素数量非常多时,您的程序会显着变慢,因为每个小部件都将参与事件循环。这不是你想要的。您希望仅 用户可见的小部件。
正在考虑
感谢大家对这个问题的贡献,我找到了解决这个问题的方法。 解决为"original thought",就是在tableView上画一个QToolButton,使用QModelIndex。通过 QModelIndex,我可以获得可以绘制任何 QWidget 的几何位置。但是,这个方法真的很复杂,因为我必须维护QModelIndex的变化,比如removeColumns和insertColumns。
另一个问题是我必须区分隐藏和删除列或行。我想我应该 post 另一个新问题来寻求帮助。 再次感谢。