Seperti yang telah Anda sebutkan, sulit untuk memprediksi berapa lama kueri berjalan (karena kueri itu sendiri dan parameternya, karena jaringan, karena beban server).
Pokoknya Anda harus memindahkan kueri SQL ke QThreads. Ini memungkinkan aplikasi Anda menyajikan GUI saat kueri dijalankan.
Saya juga tidak akan mencoba menyelesaikan ini dengan batas waktu. Anda akan mendapat banyak masalah karena Anda akan gagal memilih batas waktu yang tepat untuk setiap kueri dan setiap situasi. Sebagai gantinya, sediakan cara untuk membatalkan kueri dengan tombol atau dialog sehingga pengguna dapat memutuskan apakah masuk akal untuk terus menunggu atau tidak.