1

Worker使用して配置されている別のスレッドで何らかの作業を行うクラスがありmoveToThread()ます。メソッド内では、タスクにかかる推定時間に基づいて、進行状況の更新を発行することになっているWorker::doWork()も作成します。QTimer

次に例を示します。

ThreadController::ThreadController()
{
    Worker* worker = new Worker;
    worker->moveToThread(&m_workerThread);

    // ...        

    m_workerThread.start();
    emit startWorker(params); // connected to Worker::doWork()
}


class Worker : public QObject
{
    Q_OBJECT

public slots:
    Worker::doWork(const QString& params)
    {
        QTimer* timer = new QTimer(this);
        connect( timer, SIGNAL(timeout)), this, SLOT(updateProgress()) );
        timer->start(estimateTaskLength() / 100);

        // perform work...
    }
}

現在、これは意図したとおりに機能しません。スロットは、作業が完了した後updateProgress()にのみ呼び出され始めます。

4

2 に答える 2