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

时间:2017-04-07 11:58:52

标签: c++ qt view model

我需要将自定义小部件放在子类QTableView的{​​{1}}单元格内。

我搜索已经给出的解决方案,但没有人抓住我的需求。 自定义窗口小部件必须始终保持在此处,而不仅仅是在QAbstractTableModel之类的编辑模式下。 自定义小部件可能就是一切,我正在为所有小部件搜索一般解决方案QItemDelegate::createEditorQPushButtons

抱歉我的英文。

1 个答案:

答案 0 :(得分:1)

您可以使用QAbstractItemView::setIndexWidget并覆盖QAbstractItemView::dataChanged来达到您想要的效果,如下所示:

class MyTableView : public QTableView
{
protected:
  void dataChanged(const QModelIndex &topLeft, const QModelIndex & bottomRight, const QVector<int> & roles)
  {
    QPushButton *pPushButton = qobject_cast<QPushButton*>(indexWidget(topLeft));
    if (pPushButton)
        pPushButton->setText(model()->data(topLeft, Qt::DisplayRole).toString());
    else
        QTableView::dataChanged(topLeft, bottomRight, roles);
  }
};

void main ()
{
    MyTableView table;
    table.setCellWidget(table.model()->index(0, 0, QModelIndex()),new QPushButton());
}

请注意,这是一个不完整的实现,但它应该向您展示如何解决您的问题。一个真正的实现应该更新topLeft和bottomRight之间的所有QPushButton。