I think I've managed to make this work, but not quite how I originally intended. My code now looks something like this:

Qt Code:
  1. class MyModel {
  2. MyModel();
  3. ...
  4. slots:
  5. void EndResetModel();
  6. ...
  7. void MyModel::HandleSource2Data(const DataItem& item)
  8. ...
  9. }
  10.  
  11. MyModel::MyModel()
  12. {
  13. ...
  14. source2Timer = new QTimer(this);
  15. source2Timer->setInterval(500);
  16. source2Timer->setSingleShot(true);
  17. connect(source2Timer, SIGNAL(timeout()), this, SLOT(EndResetModel()));
  18. }
  19.  
  20. void MyModel::EndResetModel()
  21. {
  22. endResetModel();
  23. }
  24.  
  25. void MyModel::HandleSource2Data(const DataItem& item)
  26. {
  27. beginResetModel();
  28. source2Cache.Add(item);
  29. source2Timer->start();
  30. }
To copy to clipboard, switch view to plain text mode 

endResetModel() is not a slot, its just a protected function. So the timer can't call endResetModel() directly; it needs to call a custom slot that in turn calls endResetModel().