2016-04-07 4 views
0

QTableViewは、データを処理しようとしているWebサイトが新しいデータを持っているときに自動更新されないので、一度だけ更新します。私はアプリケーションを再起動するとQTableView自体が正常に更新されるので、最新のデータを取得するためにURLを再実行する必要があるかもしれません。誰かが私にこれをする方法を提案することはできますか?私はどのように私の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 (;;)ループを使用することはお勧めできません。