я забыл упомянуть одну маленькую деталь
результат нужен не просто валидный, но ещё и не нулл
QVariant value(QVariant::String);
qWarning() << value << value.isValid() << value.isNull();
QVariant value1(QString(""));
qWarning() << value1 << value1.isValid() << value1.isNull();
даст в результате
QVariant(QString, "") true true
QVariant(QString, "") true false
а для
QVariant value(QVariant::String);
qWarning() << value << value.isValid() << value.isNull();
QSqlField f("fname", QVariant::String);
f.setValue(value);
QSqlDatabase db;
qWarning() << db.driver()->formatValue(f);
даст на выходе нулл, а не пустую квотрированную строку
и башка не соображает как можно и можно ли вообще избавиться от этого изНулл в варианте