本页内容

QtTaskTree::If Class

class QtTaskTree::If

用于条件表达式的“if”元素。更多内容...

标题: #include <qconditional.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS TaskTree)
target_link_libraries(mytarget PRIVATE Qt6::TaskTree)
qmake: QT += tasktree
自: Qt 6.11
状态: 技术预览

该类处于技术预览阶段,内容可能会发生变更。

注意:本类中的所有函数均为可重入函数。

公共函数

If(const QtTaskTree::ExecutableItem &condition)
If(Handler &&handler)
If(QtTaskTree::If &&other)

详细说明

条件表达式的初始条件元素。其后必须始终跟随Then 元素。

TaskTree 模块中的条件表达式支持以异步方式处理分支条件及其主体。例如:

const Group recipe {
    If (conditionTask1) >> Then {
        bodyTask1
    } >> ElseIf (conditionTask2) >> Then {
        bodyTask2
    } >> Else {
        bodyTask3
    }
};

当上述配方与QTaskTree 配合运行时,任务树会首先启动异步的conditionTask1 。该任务完成后,根据结果,任务树可能会在conditionTask1 成功完成后执行bodyTask1 ,否则通过执行conditionTask2 来分派另一个条件。 如果执行了bodyTask1 ,则不会执行其他任务,且bodyTask1 的结果即为整个条件表达式的最终结果。

另请参阅 Then 、Else 和ElseIf 。

成员函数文档

[explicit] If::If(const QtTaskTree::ExecutableItem &condition)

创建一个包含condition 任务的初始条件元素,用于条件表达式。运行中的QTaskTree 会首先执行传入的condition ,待其完成后,若执行成功则执行Then 分支,否则执行可选提供的Else 分支或ElseIf 条件。

传入的condition 可能由多个封装在Group 元素中的任务组成,也可能是这些任务的合取或析取,例如:

const Group subRecipe {
    parallel,
    parallelConditionTask1,
    parallelConditionTask2
};

const Group recipe {
    If (conditionTask1 && !conditionTask2) >> Then {
        bodyTask1
    } >> ElseIf (subRecipe) >> Then {
        bodyTask2
    } >> Else {
        bodyTask3
    }
};

[explicit] template <typename Handler, std::enable_if_t<!std::is_base_of_v<ExecutableItem, std::decay_t<Handler>>, bool> = true> If::If(Handler &&handler)

一个辅助构造函数,用于接收在运行中的 `QTaskTree` 评估初始条件时需执行的同步 `handler `。

这是以下代码的快捷写法:

If (QSyncTask(handler))

有关可接受的处理程序类型的更多信息,请参见QSyncTask 。

这是一个重载函数。

另请参阅 QSyncTask 和ElseIf 。

[constexpr noexcept default] If::If(QtTaskTree::If &&other)

通过Move构造一个If 的实例。

© 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.