C++ Qt在QTableView单元格内设置自定义小部件
我想把一个定制的小部件放到C++ Qt在QTableView单元格内设置自定义小部件,c++,qt,qtableview,C++,Qt,Qtableview,我想把一个定制的小部件放到QTableView的单元格中。小部件可以是QPushButton、复选框或其他内容。我尝试过以下方法,但没有人能让我满意: 使用委托。此策略可以绘制小部件,但不能是自定义小部件,也不能进行交互 使用QTableView::setIndexWidget()。使用此策略,自定义小部件完全覆盖单元格,绑定到QTableView的委托不工作,这意味着双击()不会对单元格进行编辑操作 请注意,该函数是独立的,就像插件一样。所以我不能做以下事情 继承自QTableView。我只能
QTableView
的单元格中。小部件可以是QPushButton
、复选框或其他内容。我尝试过以下方法,但没有人能让我满意:
QTableView::setIndexWidget()
。使用此策略,自定义小部件完全覆盖单元格,绑定到QTableView
的委托不工作,这意味着双击()不会对单元格进行编辑操作QTableView
。我只能获取绑定了QTableView
的一个指针变量——只能获取QTableView
的一个对象问题非常复杂,太多的约束限制了设计 如果您想使用模型/视图来包含小部件的数据,那么在没有委托的情况下无法执行此操作。更糟糕的是,如果您无论如何都尝试这样做,那么当元素数量非常多时,您的程序将显著减慢,因为每个小部件都将参与事件循环。这不是你想要的。您希望只涉及用户可见的小部件
考虑更多的解释。谢谢大家对这个问题的贡献,我找到了解决这个问题的方法。 它作为“原始想法”解决,即使用QModelIndex在tableView上绘制一个QToolButton。通过QModelIndex,我可以得到geomertry位置,在那里我可以绘制任何QWidget。但是,这个方法非常复杂,因为我必须维护QModelIndex的更改,比如removeColumns和insertColumns 另一个问题是,我必须区分隐藏和删除列或行。我想我应该发布另一个新问题寻求帮助。
再次感谢。我想你得走代表的路了。您可以使用自定义小部件并与它们交互。请参阅:当单击单元格时,QItemDelegate::createEditor()仅进行绘制。需要的是小部件可以在前面显示,如果我单击单元格,另一个委托也可以工作。但是QItemDelegate::paint()只绘制,而不提供可以交互的真实小部件TableView->openPersistentEditor(索引)。因此,它总是可见的!未完成的工作