Есть список серверов. В таблице. Прохожу циклом по таблице и последовательно коннекчусь к каждому серверу. После коннекта проверяю, есть интернет или нет (curl). Если курл вернул ip адрес, то в соответствующую строку таблицы добавляю этот ip. Код работает, выхлоп qDebug в консольку идет, и в таблицу тоже добавляется, но таблица перерисовывается только когда цикл закончится. В списке порядка 100 локаций, и пройтись по всем занимает около 10 минут. Всё это время окно программы не реагирует ни на что. Как его разморозить, чтобы изменения в таблице отображались в процессе прохождения цикла, а не после его окончания?
Пробовал в отдельном QThread - не помогает,
QStringList vArguments;
vArguments << "connect.sh";
QStringList curlArguments;
curlArguments << "--connect-timeout" << "5" << "ifconfig.me" ;
QString stdout, ipAddr;
QBrush brush;
brush = QBrush(Qt::green, Qt::SolidPattern);
QRegularExpression ipRegex(R"((\d{1,3}\.){3}\d{1,3})");
QTableWidgetItem* item;
bCancelSearch = false;
for ( int i=0; i<table->rowCount()-1; i++ ){
//поочередно коннект к серверам через скрипт connect.sh
QTableWidgetItem *item = table->item(i,0);
qDebug() << item->text();
vArguments << item->text();
vProcess = new QProcess();
vProcess->setProcessChannelMode(QProcess::MergedChannels);
vProcess->start( "sudo", vArguments );
vProcess->waitForFinished();
vArguments.removeLast();
//после коннекта проверка наличия инета : curl ifconfig.me
curlProcess = new QProcess();
curlProcess->setProcessChannelMode(QProcess::MergedChannels);
curlProcess->start( "curl", curlArguments );
curlProcess->waitForFinished();
stdout = curlProcess->readAllStandardOutput();
//если curl вернул ip - добаляю его в таблицу
item = table->item(i,2);
if ( ipRegex.match(stdout).hasMatch() ){
int lastPos = stdout.lastIndexOf(QChar('\n'));
ipAddr = stdout.mid(lastPos+1);
qDebug() << item->text() << "responded" << ipAddr;
txtOutput->append(item->text() + " has responded from " + ipAddr);
item = new QTableWidgetItem();
item->setText(ipAddr);
table->setItem(i,4,item);
for (int j=0; j<5; j++){
item = table->item(i,j);
item->setBackground(brush);
}
}else{
qDebug() << "no match" << item->text();
txtOutput->append(item->text() + " no response");
}
if ( bCancelSearch )return;
}Как разморозить гуй?










