Я пытаюсь сделать визуализацию поиска максимального значения массива. Идея состоит в том, чтобы показать позицию указателя на каждой итерации. Существует сетка, построенная следующим образом: первая строка содержит десять ярлыков, показывающих индекс каждого элемента массива, во второй строке - десять строк с значениями массива, а в третьем - десять ярлыков, которые могут иметь текст "" (без указателя) или "^" (указатель на это значение). Похоже, чтоКак отложить процесс в Qt
0 1 2 3 4 5 6 7 8 9 - ряд индексов
12 23 34 54 78 1 32 26 55 26 - элементы
_ _ _ _^_ _ _ _ _ _ - строка указателей
При поиске максимального значения указатель должен перейти к следующему элементу после каждой итерации. И для комфортного восприятия необходимо ждать секунды во время каждой итерации, если цикл. Код щели:
void Widget::slotFindMax()
{
int max = a[0];
pointer[0]->setText("^");
maxValue->setText(QString::number(max));
for (int i = 1; i < 10; i++)
{
pointer[i - 1]->setText(" ");
QThread::sleep(1);
pointer[i]->setText("^");
if (a[i] > max)
{
max = a[i];
maxValue->setText(QString::number(max));
}
}
pointer[9]->setText(" ");
}
Я вижу, что QThread :: сон() не работает здесь. Насколько я понял, QTimer :: singleShot тоже не подходит, потому что мне нужна задержка не до обработки слота, но во время его. Может ли любой, кто столкнулся с такой проблемой, привести пример правильного использования упомянутых мной функций или дать эквивалентный пример, который мог бы работать в этом случае?
Ваша проблема заключается в блокировке gui. Пока ваш цикл работает, взаимодействие с пользователем невозможно, и экран не обновляется. Не блокируйте gui. –