From doc:
Returns the size of the result (number of rows returned), or -1 if the
size cannot be determined or if the database does not support
reporting information about query sizes. Note that for non-SELECT
statements (isSelect() returns false), size() will return -1. If the
query is not active (isActive() returns false), -1 is returned.
To determine the number of rows affected by a non-SELECT statement,
use numRowsAffected().
http://qt-project.org/doc/qt-4.8/qsqlquery.html#size
Your query isSelect
and active but SQLite is one of the databases for which the size of the query is not directly available.
To prove call this for example:
qDebug() <<db.driver()->hasFeature(QSqlDriver::QuerySize);
It returns false