@sairun
For bound variables you can only use what the driver actually accepts. This does not mean you can use them "anywhere", e.g. as though it was a "textual substitution". I don't know what SQLite actually accepts for its VALUES syntax, but I very much doubt it allows any single variable in (VALUES :val). It is likely to want each item/element passed in separately. You might try with idList being a QStringList rather than a single QString, but again I doubt it will accept that either.
As a similar example, if you wanted to generate a clause like
WHERE something IN ( val1, val2, val3, ...)
I know that you cannot do that via IN ( :vals ) for the same reason.
Either generate the whole thing with as many separate variables as items and as many separate binds or generate a complete literal string as should be passed to SQLite for the statement without variables/bindings.