Замена функции сна в Qt / C ++
Поэтому я пишу программу, которая отображает каждую букву слова в течение 1 секунды с интервалом в 1 секунду между буквами. (Это для упражнения по орфографии для 1 класса). В настоящее время я использую функцию сна, чтобы «приостановить» программу на 1 секунду, прежде чем она снова «обновится». После этого он отображает слово на секунду, а затем удаляет его. Я перерисовываю перед функцией сна, иначе она не обновляется вовремя.
Вот основная функция:
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("");
Это работает нормально, за исключением того, что программа перестает отвечать на запросы (хотя я вижу, что все еще отображается правильный вывод), пока не завершится выполнение всей функции, затем она снова будет работать нормально. Есть ли другой способ, которым я могу достичь этой цели, не используя сон? Я довольно новичок в Qt.
Обновление я сделал, Я создал новый класс, который будет обрабатывать таймер, но, похоже, он фактически не соединяет сигнал и слот. Вот файл .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
и файл .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";
}