def _add_widget(self, n): item_toplevel = QtGui.QStandardItem("{}th item".format(n)) self._datamodel.setItem(n, 0, item_toplevel) widget_toplevel = QtGui.QPushButton("{}th button".format(n)) qindex_toplevel = self._datamodel.index(n, 1, QtCore.QModelIndex()) self.setIndexWidget(qindex_toplevel, widget_toplevel) if n == 2: item_child_col0 = QtGui.QAbstractOpenGLFunctionsQStandardItem("child col0") item_child_col1 = QtGui.QStandardItem("child col1") # item_toplevel.appendRow(item_child_col0) item_toplevel.insertRow(0, [item_child_col0, item_child_col1]) widget_child = QtGui.QPushButton("child widget") qindex_child = item_child_col1.index() self.setIndexWidget(qindex_child, widget_child)