Qt 在 QTableView 单元格中设置自定义小部件

Qt set a custom widget inside a QTableView cell

我想将自定义小部件放入 QTableView 的单元格中。 Widget 可以是 QPushButton、复选框或其他东西。我尝试了以下方法,但没有一个让我满意:

  1. 使用委托。此策略可以绘制小部件,但不能是自定义小部件,并且不能交互。
  2. 使用QTableView::setIndexWidget()。使用此策略,自定义小部件完全且绝对地覆盖单元格,绑定到 QTableView 的委托不起作用,这意味着 a-double-click() 不会对单元格进行编辑操作。

请注意,该功能是独立的,就像一个插件。所以我不能做以下事情。

  1. 继承自QTableView。我只能获得与 QTableView 绑定的指针变量----只有 QTableView.
  2. 的对象
  3. 继承自任意模型。模型由其他用户控制,程序员编写模型不应该也不能只使用我自定义的模型。

这个问题真的很复杂,太多的约束限制了设计。

如果您想使用 model/view 来包含您的小部件的数据,则不能在没有委托的情况下执行此操作。更糟糕的是,如果您无论如何都尝试这样做,当元素数量非常多时,您的程序会显着变慢,因为每个小部件都将参与事件循环。这不是你想要的。您希望 用户可见的小部件。

正在考虑 以获得更多解释。

感谢大家对这个问题的贡献,我找到了解决这个问题的方法。 解决为"original thought",就是在tableView上画一个QToolButton,使用QModelIndex。通过 QModelIndex,我可以获得可以绘制任何 QWidget 的几何位置。但是,这个方法真的很复杂,因为我必须维护QModelIndex的变化,比如removeColumns和insertColumns。

另一个问题是我必须区分隐藏和删除列或行。我想我应该 post 另一个新问题来寻求帮助。 再次感谢。