Cuando tratas de obtener el valor de un campo de esta manera TQuery["NOMBRECAMPO"], estás forzando un typecast a variant.
Intenta llamando los campos con el tipo de dato que corresponde Fields.FieldByName("").AsXXXXX
Código Delphi
[-]
procedure Tflistadoproducto.bseleccionarClick(Sender: TObject);
begin
Fmodulo.Tdetallefactura.Fields.FieldByName('Subtotal').AsFloat := cant * Fmodulo.Qproducto.Fields.FieldByName('precio').AsFloat;
DBsubtotal.Text := Fmodulo.Tdetallefactura.Fields.FieldByName('Subtotal').AsString;
end;