Jak już wspomniałeś, trudno jest przewidzieć, jak długo trwa zapytanie (ze względu na samo zapytanie i jego parametry, ze względu na sieć, ze względu na obciążenie serwera).
W każdym razie powinieneś przenieść zapytania SQL do QThreads. Dzięki temu aplikacja może obsługiwać GUI podczas wykonywania zapytań.
Nie próbowałbym też rozwiązać tego przez limity czasu. Wpadniesz w spore kłopoty, ponieważ nie uda Ci się wybrać odpowiednich limitów czasu dla każdego zapytania i każdej sytuacji. Zamiast tego zapewnij sposób anulowania zapytań za pomocą przycisku lub okna dialogowego, aby użytkownik mógł zdecydować, czy rozsądnie jest kontynuować czekanie, czy nie.