An update on this from my side:
My initial approach wasn't flawless, as @VRonin pointed out, because QAbstractItemModel::columnCount didn't return the appropriate values. I've fixed this, by not immediately passing the new count after inserting the elements to a list, of which the size was used, but instead have the model save exactly how many categories it currently accounts for, so the connection looks like this:
connect(item_registry.get(), &item_registry::category_added, [this](int position, QSharedPointer<category>) {
beginInsertColumns(QModelIndex{}, position, position);
_current_category_count++;
endInsertColumns();
});
and likewise columnCount:
int item_model::columnCount(QModelIndex const&) const {
if(!_register) {
qCritical() << "Item-model didn't have a register";
return 0;
}
return 1 /* name */ + _current_category_count;
}