首页 > 解决方案 > 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);
    }
}

标签: multithreadingqt

解决方案


我解决了这个问题。只需在定时器槽中创建 QTimer 并更新 QTableWidget


推荐阅读