Я пытаюсь обернуть графический интерфейс вокруг существующего приложения консоли управления. Основная функция - поиск сетевых устройств, которым задан тайм-аут и по сути является блокирующим вызовом до истечения таймаута (использование сна для блокировки). В этом примере вызов равен this->Manager->Search(...)
.Принудительное обновление QTListWidget для добавления/удаления элементов
Моя проблема в том, что я хочу, чтобы QListWidget отображал «Поиск ...» во время поиска, а затем обновлялся с результатами по завершении поиска. Мой на клик код кнопки Search
выглядит следующим образом:
void ManagerGUI::on_searchButton_clicked()
{
ui->IPList->clear();
new QListWidgetItem(tr("Searching..."), ui->IPList);
ui->IPList->repaint();
this->Manager->Search(static_cast<unsigned int>(this->ui->searchTime->value()*1000.0));
ui->IPList->clear();
if(this->Manager->GetNumInList() != 0)
this->displayFoundInList(this->Manager->GetFoundList());
else
new QListWidgetItem(tr("No Eyes Found"), ui->IPList);
ui->IPList->repaint();
}
Когда я нажал на кнопку, то QListWidget
IPList
не обновляется до тех пор, после того, как тайм-аут имеет место (и я предполагаю, что до тех пор, после того, как этот обратный вызов не прекращается) , У кого-нибудь есть предложения? У меня создалось впечатление, что вызов ui->IPList->repaint()
вызовет немедленную перерисовку списка.
Дополнительная информация:
- QT версии 5.1.0 32-Bit
- Составлено с использованием VS2012
- Запуск на Win7 Pro 64-бит (но быть портирована на OSX и Linux, так что ничего выиграть -специфические, пожалуйста)
Если вы заблокировали этот-> Менеджер-> Поиск, вы должны запустить в другом потоке ... – Trompa