このページでは

QtTaskTree::QTaskTree Class

class QtTaskTree::QTaskTree

QTaskTreeクラスは、宣言的な方法で定義された非同期タスクのツリーを実行します。詳細...

ヘッダー #include <qtasktree.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS TaskTree)
target_link_libraries(mytarget PRIVATE Qt6::TaskTree)
qmake: QT += tasktree
以来:Qt 6.11
継承: QObject

注意:このクラスの関数はすべてリエントラントです。

パブリック関数

QTaskTree(QObject *parent)
QTaskTree(const QtTaskTree::Group &recipe, QObject *parent = nullptr)
virtual ~QTaskTree() override
qsizetype asyncCount() const
void cancel()
bool isRunning() const
void onStorageDone(const QtTaskTree::Storage<StorageStruct> &storage, Handler &&handler)
void onStorageSetup(const QtTaskTree::Storage<StorageStruct> &storage, Handler &&handler)
qsizetype progressMaximum() const
qsizetype progressValue() const
QtTaskTree::DoneWith runBlocking()
QtTaskTree::DoneWith runBlocking(const QFuture<void> &future)
void setRecipe(const QtTaskTree::Group &recipe)
void start()
qsizetype taskCount() const

シグナル

void asyncCountChanged(qsizetype count)
void done(QtTaskTree::DoneWith result)
void progressValueChanged(qsizetype value)
void started()

静的パブリックメンバ

QtTaskTree::DoneWith runBlocking(const QtTaskTree::Group &recipe)
QtTaskTree::DoneWith runBlocking(const QtTaskTree::Group &recipe, const QFuture<void> &future)

再実装された保護された関数

virtual bool event(QEvent *event) override

詳細説明

タスクツリーが何をすべきかの説明はrecipeを介して渡される。

メンバ関数のドキュメント

[explicit] QTaskTree::QTaskTree(QObject *parent)

与えられたparent で空のタスクツリーを構築する。setRecipe() を使って、タスク・ツリーがどのようにタスクを実行し、終了したタスクをどのように処理するかについての宣言的記述を渡す。

空のタスクツリーを起動することはできず、関連する警告メッセージが発行されます。

setRecipe() およびstart()も参照

[explicit] QTaskTree::QTaskTree(const QtTaskTree::Group &recipe, QObject *parent = nullptr)

与えられたrecipeparent でタスクツリーを構築する。タスク・ツリーが開始されると、recipe 内のタスクを実行し、渡された記述に従って終了したタスクを処理する。

これはオーバーロードされた関数である。

setRecipe() およびstart()も参照

[override virtual noexcept] QTaskTree::~QTaskTree()

タスクツリーを破壊する。

タスクツリーが実行中に破棄される場合、実行中のタスクはすべて直ちにキャンセルされる。この場合、グループやタスクの done ハンドラやonStorageDone() ハンドラも呼び出されない。タスク・ツリーもデストラクタからシグナルを発しない。done() やprogressValueChanged() シグナルさえも発しない。この動作は常に信頼できる。実行中のタスク・ツリーをデストラクトしてもまったく問題ない。

実行中のタスク・ツリーをデストラクトするのは通常のパターンである。使用されるタスクがデストラクタをノンブロッキングで実装していれば、現在実行中のタスクの終了を待つことなく、デストラクトが迅速に実行されることが保証される。

注意: 実行中のタスクのハンドラやタスクツリーのシグナルからデストラクタを直接呼び出さないでください。このような場合は、代わりにdeleteLater() を使用する。

cancel()も参照のこと

qsizetype QTaskTree::asyncCount() const

非同期呼び出しのチェーンの現在の実カウントを返す。

返される値は、タスクツリーの実行中に何回制御が呼び出し元のイベントループに戻ったかを示す。0タスクツリーの実行が完全に同期的に終了した場合、この値は0 のままである。タスク・ツリーに、start ()の呼び出し中に正常に開始された非同期タ スクが含まれている場合、start ()の呼び出しが終了する直前に、 この値は1 にバンプされる。その後、非同期タスクが終了し、継続の可能性があるタスクが開始されると、 この値は再びバンプされる。このバンプは、タスクツリーが終了するまで続く。タスク・ツリーがdone() シグナルを発すると、バンプは停止する。asyncCountChanged() シグナルは、この値がバンプされるたびに発せられる。

asyncCountChanged()も参照のこと

[signal] void QTaskTree::asyncCountChanged(qsizetype count)

このシグナルは、実行中のタスクツリーが呼び出し元のイベントループに制御を戻そうとするときに発せられる。タスクツリーが開始されると、このシグナルは0count の値で発せられ、その後asyncCount() の値が更新されるたびにcount の値で発せられる。0 の値を持つ最初のシグナルを除いて)送られるシグナルはすべて、その発信の後もタスク・ツリーが非同期で実行されていることを保証する。

asyncCount()も参照

void QTaskTree::cancel()

実行中のタスクツリーの実行をキャンセルする。

実行中のすべてのタスクを直ちにキャンセルする。実行中のすべてのタスクとグループはエラーで終了し、それらの done ハンドラをDoneWith::Cancel で呼び出します。ストレージのonStorageDone() ハンドラも呼び出される。progressValueChanged() シグナルも送信される。この動作は常に信頼できる。

cancel()関数は同期的に実行されるので、cancel()を呼び出した後、実行中のタスクはすべて終了し、ツリーはすでにキャンセルされている。使用されるタスクがデストラクタをノンブロッキングで実装していれば、cancel()は、現在実行中のタスクの終了をブロックすることなく、迅速に実行されることが保証される。

タスク・ツリーが空の場合、つまりデフォルトのコンストラクタで構築された場合、 cancel()の呼び出しはno-opであり、関連する警告メッセージが発行される。

それ以外の場合、タスク・ツリーが開始されていないときは、 cancel() への呼び出しは無視される。

注意: 実行中のタスクのハンドラやタスク・ツリーのシグナルから、この関数を直接呼んではならない。

~QTaskTree()も参照のこと

[signal] void QTaskTree::done(QtTaskTree::DoneWith result)

このシグナルはタスクツリーが終了したときに発せられ、実行の最終的なresult 。このシグナルが発せられた後、タスクツリーはいかなるハンドラーも呼び出さず、いかなるシグナルも発しない。

注意: このシグナルのハンドラから直接タスクツリーを削除しないでください。代わりにdeleteLater() を使用してください。

started()も参照してください

[override virtual protected] bool QTaskTree::event(QEvent *event)

再インプリメント:QObject::event(QEvent *e).

bool QTaskTree::isRunning() const

タスクツリーが現在実行中であればtrue を返し、そうでなければfalse を返す。

start() およびcancel()も参照のこと

template <typename StorageStruct, typename Handler> void QTaskTree::onStorageDone(const QtTaskTree::Storage<StorageStruct> &storage, Handler &&handler)

storage 、実行中のタスクツリーから最終データを動的に取得するために、ストレージ donehandler をインストールする。

StorageHandlerStorageStruct インスタンスへのconst 参照を取る:

静的QByteArrayload(constQString&fileName) {...} Storage<QByteArray> ストレー;const autoonLoaderSetup= [](QThreadFunction<QByteArray> &task) { task.setThreadFunctionData(&load, "foo.txt"); };const autoonLoaderDone= [storage]( constQThreadFunction<QByteArray> &task) {*storage =task.result(); };constGroup root { storageQThreadFunctionTask(onLoaderSetup,onLoaderDone,CallDoneFlag::OnSuccess) };QTaskTreetaskTree(root);autocollectStorage= [](constQByteArrayストレージ){ }; auto collectStorage = [](const    qDebug() << "final content" << storage;
}; taskTree.onStorageDone(storage,collectStorage); taskTree.start();

実行中のタスクツリーが、storage が置かれているGroup を離れようとするとき、StorageStruct インスタンスをデストラクトする。StorageStruct インスタンスが破棄される直前、そしてこのグループから可能なハンドラがすべて呼び出された後、タスクツリーは渡されたhandler を呼び出す。これにより、与えられたストレージの最終的な内容を動的に読み出し、タスクツリーの外部でさらに処理することができる。

このハンドラは、実行中のツリーがキャンセルされたときにも呼ばれる。しかし、実行中のツリーが破棄されるときには呼ばれない。

onStorageSetup()も参照のこと

template <typename StorageStruct, typename Handler> void QTaskTree::onStorageSetup(const QtTaskTree::Storage<StorageStruct> &storage, Handler &&handler)

実行中のタスクツリーに初期データを動的に渡すために、storage のストレージセットアップhandler をインストールする。

StorageHandlerStorageStruct インスタンスへの参照を取る:

static void save(const QString &fileName, const QByteArray &array) { ... }

Storage<QByteArray> storage;

const auto onSaverSetup = [storage](QThreadFunction<QByteArray> &task) {
    task.setThreadFunctionData(&save, "foo.txt", *storage);
};

const Group root {
    storage,
    QThreadFunctionTask(onSaverSetup)
};

QTaskTree taskTree(root);
auto initStorage = [](QByteArray &storage){
    storage = "initial content";
};
taskTree.onStorageSetup(storage, initStorage);
taskTree.start();

実行中のタスクツリーがstorage が置かれているグループに入ると、このグループ内で使用できるように、StorageStruct インスタンスを作成する。StorageStruct インスタンスが作成された直後、このグループのハンドラーが呼び出される前に、 タスクツリーは渡されたhandler を呼び出す。これにより、与えられたストレージの初期コンテンツを動的に設定することができる。その後、任意のグループのハンドラが呼び出されると、タスクツリーは作成され初期化されたストレージをアクティブにし、任意のグループのハンドラ内で利用できるようにする。

onStorageDone()も参照してください

qsizetype QTaskTree::progressMaximum() const

progressValue() の最大値を返す。

注意: 現在はtaskCount() と同じです。これは将来変更される可能性があります。

progressValue()も参照

qsizetype QTaskTree::progressValue() const

0progressMaximum() の間にある現在の進捗値を返す。

返される数値は、タスクツリーの実行中に、いくつのタスクが既に終了したか、キャンセルされたか、スキップされたかを示す。タスクツリーが開始されると、この数値は0 に設定される。 タスクツリーが終了すると、この数値は常にprogressMaximum() と等しくなる。

progressMaximum() およびprogressValueChanged()も参照のこと

[signal] void QTaskTree::progressValueChanged(qsizetype value)

このシグナルは、実行中のタスクツリーがいくつかのタスクを終了、キャンセル、スキップしたときに発せられる。value は、終了したタスク、キャンセルされたタスク、スキップされたタスクの現在の総数を示す。タスクツリーが開始され、started() シグナルが発せられた後、このシグナルは0 の初期値value とともに発せられる。 タスクツリーが終了しようとしているとき、done() シグナルが発せられる前に、このシグナルはprogressMaximum() の最終値value とともに発せられる。

progressValue() およびprogressMaximum()も参照のこと

QtTaskTree::DoneWith QTaskTree::runBlocking()

QEventLoop::ExcludeUserInputEvents でローカルイベントループを実行し、タスクツリーを開始する。

タスク・ツリーが正常に終了した場合はDoneWith::Success を返し、そうでない場合はDoneWith::Error を返す。

注意: メイン・スレッドからこのメソッドを使うのは避けてください。代わりに非同期のstart() を使用してください。このメソッドは、非メイン・スレッドまたは自動テストで使用します。

start()も参照のこと

[static] QtTaskTree::DoneWith QTaskTree::runBlocking(const QtTaskTree::Group &recipe)

渡されたrecipe を使って一時的なタスクツリーを構築し、ブロック化して実行する。

タスク・ツリーが正常に終了した場合はDoneWith::Success を返し、そうでない場合はDoneWith::Error を返す。

注意: メイン・スレッドからこのメソッドを使うのは避けてください。代わりに非同期のstart() を使用してください。このメソッドは、非メイン・スレッドまたは自動テストで使用します。

start()も参照のこと

QtTaskTree::DoneWith QTaskTree::runBlocking(const QFuture<void> &future)

渡されたfuture は、キャンセル・イベントをリッスンするために使われる。タスク・ツリーがキャンセルされると、このメソッドは渡されたfuture をキャンセルします。

この関数はQTaskTree::runBlocking() をオーバーロードします。

[static] QtTaskTree::DoneWith QTaskTree::runBlocking(const QtTaskTree::Group &recipe, const QFuture<void> &future)

渡されたfuture は、キャンセル・イベントをリッスンするために使われる。タスク・ツリーがキャンセルされると、このメソッドは渡されたfuture をキャンセルします。

この関数は、QTaskTree::runBlocking(const Group &recipe)をオーバーロードします。

void QTaskTree::setRecipe(const QtTaskTree::Group &recipe)

与えられたrecipe をタスクツリーに設定する。タスクツリーが開始されると、recipe 内に含まれるタスクを実行し、渡された記述に従って終了したタスクを処理する。

注意: 実行中のタスクツリーに対して呼び出された場合、この呼び出しは無視されます。

QTaskTree(const QtTaskTree::Group &recipe, QObject *parent = nullptr) およびstart()も参照してください

void QTaskTree::start()

タスクツリーを開始する。

setRecipe() またはコンストラクタを使用して、タスク・ツリーが含まれるタスクを実行し、終了したタスクを処理するための宣言的記述を設定する。

タスク・ツリーが空の場合、つまりデフォルトのコンストラクタで構築された場合、 start() の呼び出しはノー・オプションであり、関連する警告メッセージが発行される。

それ以外の場合、タスク・ツリーが既に実行されているときは、start() への呼び出しは無視され、関連する警告メッ セージが発行される。

それ以外の場合は、タスク・ツリーが開始される。

開始されたタスク・ツリーは、例えばメイン・グループの開始ハンドラがSetupResult::StopWithError を返すときなど、同期的に終了することがある。このため、start() を呼び出す前に、done シグナルへの接続を確立しておく必要がある。タスク・ツリーが start() 呼び出し後も実行中であるかどうかを検出するには、isRunning() を使用する。

タスク・ツリーの実装は、実行中のイベント・ループに依存しています。このメソッドを呼び出すときは、QEventLoopQCoreApplication 、またはそのサブクラスのいずれかが実行されている(または実行されようとしている)ことを確認してください。

QTaskTree(const QtTaskTree::Group &recipe, QObject *parent = nullptr),setRecipe(),isRunning(),cancel()も参照してください

[signal] void QTaskTree::started()

このシグナルは、タスク・ツリーが開始されるときに発せられる。このシグナルの発信に同期して、0 の初期値を持つprogressValueChanged() シグナルが発信される。

start() およびdone()も参照の こと。

qsizetype QTaskTree::taskCount() const

保存されたレシピに含まれる非同期タスクの数を返します。

メモ: 返される数にはQSyncTask タスクは含まれません。

メモ : withTimeout() を使用してセットアップされたタスクまたはグループはタスクの総数を1 だけ増やします。

setRecipe() およびprogressMaximum()も参照してください

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.