multithreading - Qt。如何正确打印来自 QThread 对象的数据?
问题描述
我有 QList ,其中包含继承自 QThread 对象。方法中的这些对象run()
以不同的周期(我使用QThread::sleep
)循环执行一些工作,并将结果保存在私有字段中。
问题
QTableView 或 QTableWidget 中的打印结果如何正确?
我的想法 - 创建将在 QTableWidget 中打印的线程导致无限循环,但我想这个想法很糟糕......
//httpgettask.h
//Task inherit from QThread
class HttpGetTask : public Task
{
public:
HttpGetTask(const QString &, const int &, const int &);
HttpGetTask(const QUrl &, const int &, const int &);
void run();
};
//httpgettask.cpp
HttpGetTask::HttpGetTask(const QUrl &url, const int &period, const int &errLimit) :
Task(url, period, errLimit, "HTTP GET")
{
}
HttpGetTask::HttpGetTask(const QString &url, const int &period, const int &errLimit) :
Task(url, period, errLimit, "HTTP GET")
{
}
void HttpGetTask::run()
{
TestConn conn(url);
Response res;
QString msg;
int errCount = 0;
while (!stopThread)
{
msg = "";
res = conn.get();
if (!res.isSuccess())
{
if (++errCount == errLimit) {
msg = QString("ERROR!! %1 ERROR").arg(errLimit);
++errors;
errCount = 0;
}
}
msg = QString("%1 %2 %3 %4").arg(QDateTime::currentDateTime().toString(datePattern),
msg,
"HTTP_GET",
res.getMessage());
writeResultFile(msg);
++checkCount;
QThread::sleep(period);
}
}
解决方案
我解决了这个问题。只需在定时器槽中创建 QTimer 并更新 QTableWidget