виджет обновляется только в конце цикла for.Мне нужно, чтобы он обновлялся внутри цикла для постепенно - PullRequest
1 голос
/ 17 апреля 2019

Как я могу использовать этот «для цикла» ниже, чтобы окно обновлялось немедленно.Sleep (5) только для того, чтобы увидеть, заполнены ли элементы мгновенно

Я использую Qt в простом «классе MainWindow: public QMainWindow» с одной кнопкой и одним plainTextEdit и одним textEdit

for (int i=0; i < 10 ; i++ )
{
    sentFrame = "toto"+i;
    ui->alarmSent->addItem(sentFrame.toHex()); // filled at the end of for loop
    ui->sentTest->insertPlainText(sentFrame.toHex()); // filled at the end of for loop
    sleep(5);
}

1 Ответ

3 голосов
/ 17 апреля 2019

Не следует использовать метод сна в графическом интерфейсе, поскольку он на длительное время блокирует цикл событий, в котором находится графический интерфейс пользователя, и для обхода этой проблемы необходимо использовать QTimer::singleShot() + QEventLoop:

for (int i=0; i < 10 ; i++ )
{
    sentFrame = "toto"+i;
    ui->alarmSent->addItem(sentFrame.toHex()); 
    ui->sentTest->insertPlainText(sentFrame.toHex()); 
    QEventLoop loop;
    QTimer::singleShot(5*1000, &loop, &QEventLoop::quit);
    loop.exec();
}
...