2016-04-07 3 views
0

Aktualisiert das QTableView nur einmal, da die Websites, von denen ich versuche, Daten zu verarbeiten, nicht automatisch aktualisiert werden, wenn sie über neue Daten verfügen. Möglicherweise muss ich die URL erneut ausführen, um die neuesten Daten zu erhalten, da sich QTableView beim Neustart der Anwendung in Ordnung bringt. Kann mir jemand einen Weg vorschlagen, dies zu tun? Wie rufe ich meine slotReadyRead() rekursiv mit einer gewissen Verzögerung auf. Benutze ich Timer oder mache Multi-Threading oder verwende eine While (1)/für (;;) -Schleife? Ich möchte einen TCP-Server für Database in der Zukunft implementieren und denke, dass kontinuierliche Schleifen chaotisch sein können oder ein Problem sein können.Aktualisieren von Daten auf QTableView von der Website (mit Unterbrechungen)

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); 
} 

Antwort

0

Sie können eine QTimer verwenden, um eine Aktion in einem definierten Intervall feuern die aktualisierten Daten zum Download (oder die letzte Version, wenn die Website nicht in der Zwischenzeit aktualisiert wurde).

Wie Sie bemerkt haben, ist es keine gute Idee, eine while(1) oder eine for (;;) Schleife zu verwenden.