Jak jste již zmínili, je těžké předpovědět, jak dlouho dotaz běží (kvůli dotazu samotnému a jeho parametrům, kvůli síti, kvůli zatížení serveru).
Každopádně byste měli přesunout dotazy SQL do QThreads. To umožňuje vaší aplikaci obsluhovat GUI během běhu dotazů.
Také bych se to nesnažil řešit časovými limity. Dostanete se do mnoha problémů, protože se vám nepodaří zvolit správné časové limity pro každý dotaz a každou situaci. Místo toho poskytněte způsob, jak zrušit dotazy tlačítkem nebo dialogem, aby se uživatel mohl rozhodnout, zda je rozumné pokračovat v čekání nebo ne.