So I tried the suggestions by @jwernerny. I dumped the QSqlQueryModel and went with a QStandardItemModel. TableView now displays correctly. Code now looks like this:
void MainWindow::on_btnLoadTable_clicked()
{
conn = new Connection("LOCALHOST\\SQLEXPRESS", "Plants");
stdModel = new QStandardItemModel(this);
conn->init(); //Set driver and connection options
conn->open();
qry1 = new QSqlQuery(conn->db);
const int COL_COUNT = 3;
if (qry1->exec("spBatchesPerPlant"))
{
qDebug() << "Executing query...";
int row = 0; //used for counting rows in the query
while (qry1->next()) //Loop through the results
{
for (int col = 0; col < COL_COUNT; col++)
{
stdItem = new QStandardItem(qry1->value(col).toString());
stdModel->setItem(row, col, stdItem);
}
row++;
}
ui->tableView->setModel(stdModel);
}
}
Motto of the story: stored procedures generate forward only queries. QSqlQueryModel does not work for forward only queries, so use a standard item (or custom) model.