【问题标题】:Qt. How correctly print data from QThread object?Qt。如何正确打印来自 QThread 对象的数据?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多