Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt在QTableView单元格内设置自定义小部件_C++_Qt_Qtableview - Fatal编程技术网

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(索引)。因此,它总是可见的!未完成的工作