Да, можно и без QML, тем более он заточен под MVVM шаблон больше. Но основная идея при использовании Model/View не делать того, что не надо. В случае пятнашек имеем select(selected, deselected) таким образом имеем индексы двух элементов которые надо обменять местами, проверяем возможен ли обмен (получая строку/столбец), а потом с помощью setData делаем обмен местами и все. Вся логика будет простой. Хотя изначально кажется, что Model/View излишен. В любом случае легче чем подерживать кнопки и легко модифицируется делегат и qss стили
В промышленном программировании обычно так. Плюс шаблоны пустые под рукой всегда. По сути большая часть кода и есть model/view архитектура, если хоть минимальная расщиряемость в планах есть. Хотя задачу не видел :)