【问题标题】:Qt set a custom widget inside a QTableView cellQt 在 QTableView 单元格中设置自定义小部件
【发布时间】:2018-01-11 23:28:57
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我认为您将不得不走代理方式。您可以使用自定义小部件,并且可以与它们进行交互。见:stackoverflow.com/questions/16660292/…
  • QItemDelegate::createEditor() 仅在单击单元格时进行绘制。需要的是小部件可以预先显示,如果我单击单元格,另一个委托也可以工作。但是 QItemDelegate::paint() 只绘制,不提供可以交互的真实小部件
  • tableView->openPersistentEditor(索引)。有了它,它总是可见的!
  • 仍然没有工作

标签: c++ qt qtableview


【解决方案1】:

感谢大家为这个问题做出贡献,我找到了解决这个问题的方法。 解决为“原意”,就是在tableView上画一个QToolButton,使用QModelIndex。通过 QModelIndex,我可以获得可以绘制任何 QWidget 的几何位置。不过这个方法真的很复杂,我要维护QModelIndex的变化,比如removeColumns和insertColumns。

另一个问题是我必须区分隐藏和删除列或行。而且我认为我应该发布另一个新问题以寻求帮助。 再次感谢。

【讨论】:

    【解决方案2】:

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

    考虑reading this 以获得更多解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多