【发布时间】:2018-05-30 11:40:04
【问题描述】:
我有 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);
}
}
【问题讨论】:
-
请显示一些概述问题的代码——最好是minimal reproducible example。线程之间通信的“传统”
Qt方式是通过排队的信号/插槽。 -
好的,我添加一些代码。我猜每个任务必须在来自 QTableWIdget 的某些模型之间具有信号槽关系。如果有任何任务更新信息,模型将收到一个信号。但在这种情况下,任务必须知道他在列表中的索引......
标签: multithreading qt