Извините за плохой английский sh.
1) Исключить.
2) Исключить.
3) Здесь сначала всегда делают работу qt. Да, соединения (задачи для соединений) должны ждать доступных потоков, но вы легко можете добавить 10000 задач в пул потоков qt. Если хотите, настройте максимальное количество потоков в пуле, время ожидания для задач и другое. Конечно, вы должны синхронизировать c совместно используемые данные различных потоков с семафором / futex / mutex и / или атомами.
Mysql (maria) - это сервер, и этот сервер может одновременно принимать множество соединений. Это поведение в равной степени, что вы хотите для вашего приложения QT. И mysql это просто бэкэнд с данными для вашего приложения.
Итак, ваше приложение это сервер. Для простоты вы должны прослушивать сокет для новых соединений и сохранять эти клиентские соединения в vector / array и работать с каждым клиентским соединением. Всегда, когда вам что-то нужно (получить данные из mysql бэкэнда для клиента (да, с новым, отдельным для каждого клиента, подключенным отложенным подключением к mysql), считывать / записывать данные из / в клиента, закрывать соединение и т.д. c.) - вы создаете новое задание и добавляете его в пул потоков.
Это очень простое объяснение, но надеюсь, что я вам помог.