I implemented QAbstractTableModel with the usual:

Qt Code:
  1. class PrintIntervalTableModel : public QAbstractTableModel
  2. {
  3. private:
  4. virtual int rowCount (const QModelIndex & parent = QModelIndex()) const;
  5. virtual int columnCount (const QModelIndex & parent = QModelIndex()) const;
  6. virtual QVariant data (const QModelIndex & index, int role = Qt::DisplayRole) const;
  7. virtual QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
  8. virtual bool setData (const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
  9. virtual Qt::ItemFlags flags (const QModelIndex & index) const;
  10.  
  11. virtual bool insertRows (int position, int rows, const QModelIndex & parent = QModelIndex());
  12. virtual bool removeRows (int position, int rows, const QModelIndex & parent = QModelIndex());
To copy to clipboard, switch view to plain text mode 

Here is my insert rows, which is pretty simple:

Qt Code:
  1. bool PrintIntervalTableModel::insertRows(int position, int rows, const QModelIndex & parent)
  2. {
  3. beginInsertRows(QModelIndex(), position, position + rows - 1);
  4.  
  5. for (int row = 0; row < rows; ++row)
  6. {
  7. std::deque<moment_value_pair_type>::iterator it = printIntervalPairs.begin() + position;
  8. printIntervalPairs.insert(it, moment_value_pair_type());
  9. }
  10.  
  11. endInsertRows();
  12.  
  13. return true;
  14. }
To copy to clipboard, switch view to plain text mode 

Now I wonder why I actually did this? Do views (or other components) call this method?

I would like to have a button on the form that, once clicked, inserts a row underneath the user's current selection. Do I basically create a slot in the table (connected to button clicked()) that figures out where to insert the row, and then manually calls table->insertRows()?