В событийно-ориентированном программировании (event driven programming), в парадигме которого спроектирован Qt, нет причин в создании задержек в коде. Вместо этого следует использовать, например, класс QTimer, который с заданной частотой может вызывать нужные функции (методы).
Но иногда, особенно при прототипировании, необходимо по-быстрому вставить, например, задержку в какой-нибудь цикл, чтобы успеть отследить какой-то быстропротекающий процесс. Сделать это можно с помощью такого класса:
class Sleeper : public QThread
{
public:
static void usleep(unsigned long usecs){QThread::usleep(usecs);}
static void msleep(unsigned long msecs){QThread::msleep(msecs);}
static void sleep(unsigned long secs){QThread::sleep(secs);}
};
Вызывать остановку исполнения кода (сон) можно так:
Sleeper::msleep(2000);
Зачем нужно так заморачиваться, неужели нельзя просто вызвать QThread::sleep(secs) и иже с ним? Напрямую вызвать не получится, так как методы sleep, msleep, usleep - они оформлены как static protected в классе QThread. И потому их можно вызывать только изнутри самого класса, либо изнутри наследников данного класса.
Второй вопрос: а не будут ли эти методы приостанавливать только тот тред, которому они принадлежат? И поэтому их не имеет смысл вызывать в коде произвольного объекта, размещенного в каком-то треде? Ответ - задержка будет нормально работать в коде любого объекта. Потому что описание этих методов в Qt выглядит так: "Принудительная остановка текущего треда на заданное количество секунд". Кроме того, данные методы в классе QThread оформлены как static protected. А это значит, что данные статические методы не принадлежат ни одному объекту, а являются просто функциями в рамках класса. И эти функции просто берут указатель на текущий тред и в рамках его производят временную задержку.
Еще раз следует напомнить: в продакшене такое использовать не рекомендуется. Данная методика пригодна именно в момент экспериментирования с кодом.