2016-04-07 5 views
0

Обновляет QTableView только один раз, поскольку сайты, на которых я пытаюсь обрабатывать данные, не обновляются автоматически, когда у него есть свежие данные. Возможно, мне придется перезапустить URL-адрес, чтобы получить последние данные, так как QTableView обновляет все в порядке, когда я перезапускаю приложение. Может ли кто-нибудь предложить мне способ сделать это? Как я называю свой slotReadyRead() рекурсивно с некоторой задержкой. Я использую таймеры или делаю это многопоточным или использую цикл while (1)/for (;;)? Я хочу реализовать TCP-сервер для базы данных в будущем и думаю, что непрерывные циклы могут быть беспорядочными или быть проблемой.Обновление данных до QTableView с веб-сайта (с перерывами)

LogWindow::LogWindow(QWidget *parent) : 
QMainWindow(parent) 
{ 
ui->setupUi(this); 

manager = new QNetworkAccessManager(this); 
connect(manager, SIGNAL(finished(QNetworkReply*)), 
     this, SLOT(replyFinished(QNetworkReply*))); 
QNetworkRequest request(web_url); 
reply = manager->get(request); 

connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead())); 
} 

void LogWindow::slotReadyRead() 
{ 
    while(reply->bytesAvailable()) 
    { 
     processWebsite1(); 
     processWebsite2(); 

     QStandardItem *firstCol = new QStandardItem(rf_ID); 
     QStandardItem *secondCol = new QStandardItem(time); 

     model->setItem(0,0,firstCol); 
     model->setItem(0,1,secondCol); 
     ui->logs->setModel(model); 
    } 

    emit datachanged(firstCol, secondCol); 
} 

ответ

0

Вы можете использовать QTimer огнь действия на определенный интервал, чтобы загрузить обновленные данные (или последнюю версию, если сайт не был обновлен в то же время).

Как вы отметили, использовать цикл while(1) или for (;;) - это не очень хорошая идея.