Như bạn đã đề cập, thật khó để dự đoán thời gian chạy của một truy vấn (do bản thân truy vấn và các tham số của nó, do mạng, do tải của máy chủ).
Dù sao thì bạn cũng nên chuyển các truy vấn SQL vào QThreads. Điều này cho phép ứng dụng của bạn cung cấp GUI trong khi các truy vấn chạy.
Ngoài ra, tôi sẽ không cố gắng giải quyết vấn đề này bằng thời gian chờ. Bạn sẽ gặp rất nhiều rắc rối vì bạn sẽ không chọn đúng thời gian chờ cho từng truy vấn và từng tình huống. Thay vào đó, hãy cung cấp cách hủy truy vấn bằng một nút hoặc hộp thoại để người dùng có thể quyết định xem có hợp lý để tiếp tục chờ hay không.