Substitua a função sleep no Qt / C ++

Então, eu estou escrevendo um programa que exibe cada letra de uma palavra por 1 segundo com um intervalo de 1 segundo entre as letras. (É um exercício de ortografia para a 1ª série). Atualmente, estou usando a função de suspensão para "pausar" o programa por 1 segundo antes que ele "atualize" novamente. Depois disso, ele exibe a palavra por um segundo e a remove. Repintei antes da função de suspensão, caso contrário, não parece atualizar a tempo.

Aqui está a função básica:

QString word = "apple";
QThread thread;

for(int i = 0; i < word.size(); i++)
{
    ui->label1->setText(word[i]);
    ui->label1->repaint();
    thread.sleep(1);
    ui->label1->setText("");
    thread.sleep(1);
}

ui->label1->setText(word);
ui->label1->repaint();
thread.sleep(1);
ui->label1->setText("");

Isso funciona bem, exceto que o programa pára de responder (mesmo que eu possa ver a saída correta ainda sendo exibida) até que toda a função seja executada e funcione novamente. Existe outra maneira de atingir esse objetivo sem usar o sono? Eu sou bastante novo no Qt.

Atualização que fiz. Eu fiz uma nova classe que irá lidar com o cronômetro, mas ele não parece realmente conectar o sinal e o slot. Aqui está o arquivo .h:

#ifndef TIMERDISPLAY_H
#define TIMERDISPLAY_H

#include <QTimer>
#include <QObject>

class TimerDisplay:public QObject
{
    Q_OBJECT

public:
    TimerDisplay();

public slots:
    void expired();

private:
    QTimer timer;
};

#endif // TIMERDISPLAY_H

e o arquivo .cpp:

#include "timerdisplay.h"
#include <QDebug>

TimerDisplay::TimerDisplay()
{
    connect(&timer, SIGNAL(timeout()), this, SLOT(expired()));
    timer.setSingleShot(false);
    timer.setInterval(1000);
    timer.start();
}

void TimerDisplay::expired()
{
    qDebug()<<"timer expired";
}

questionAnswers(3)

yourAnswerToTheQuestion