Qtableview,在行之间添加小部件

Posted

技术标签:

【中文标题】Qtableview,在行之间添加小部件【英文标题】:Qtableview, add widgets between rows 【发布时间】:2015-04-30 15:30:11 【问题描述】:

我有一个 QTableview(多列,排序),并想添加一个按钮,在当前行下方显示其他数据。为了呈现这些附加数据,我想使用另一个小部件,它填充可变高度并跨越所有行。

虽然我知道我可以为单元格创建委托,但我想知道这是否可以用于行,或者这是否意味着我必须从 tableview 继承并修改其绘制方法,这似乎需要做很多工作对于像我这样的新手。

【问题讨论】:

【参考方案1】:
QVariant YourTableModel::data(const QModelIndex & index, int32_t role) const

  if (!index.isValid()) 
    return QVariant();
  

  if (role == Qt::DisplayRole || role == Qt::EditRole)
  
    switch (index.column())
    
    case YOUR_COL:
      double theDouble = getDoubleFromModelSomewhere();
      return QString::number(theDouble, 'f', 3);  // Format shows 3 decimals
    
  

  return QVariant();

【讨论】:

很抱歉,但这不是我想要的。我希望有一个 widget 不是自定义数据。他的意思是我可以自己画一些东西。【参考方案2】:

如果我正确理解了您的问题,那么我认为这就是答案。

QTableView *view = new QTableView;
view->setItemDelegateForRow(int row, QAbstractItemDelegate *delegate);

【讨论】:

是的,你需要继承 QItemDelegate... 尽管 Qt 推荐使用 QStyledItemDelegate。使用 Paint Method 绘制您需要的任何内容。然后使用上面的代码。

以上是关于Qtableview,在行之间添加小部件的主要内容,如果未能解决你的问题,请参考以下文章

如何调整包含 QTableView 的小部件的大小?

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

小部件作为 QTableView 中的数据

QTableView/QTableWidget 中的类似 Ktorrent 的小部件

如何防止多行文本小部件放置在行中时被剪裁?

展开并在行中展开时,如何在不更改布局的情况下包装小部件列表?