本页内容

SignalSpy QML Type

启用信号发出的内省功能。更多...

Import Statement: import QtTest
Inherits:

Item

属性

方法

详细说明

在下面的示例中,安装了一个 SignalSpy 来监听用户自定义的 Button 类型的“clicked”信号。当该信号被触发时,监听器上的count 属性值将增加。

Button {
    id: button
    SignalSpy {
        id: spy
        target: button
        signalName: "clicked"
    }
    TestCase {
        name: "ButtonClick"
        function test_click() {
            compare(spy.count, 0)
            button.clicked();
            compare(spy.count, 1)
        }
    }
}

上述测试方式适用于同步发出的信号。对于异步信号,可以使用 `wait()` 方法使测试阻塞,直到信号发生(或超时结束)。

另请参阅 TestCase 和 Qt Quick Test。

属性文档

count : int [read-only]

该属性定义了自上次调用clear() 以来,target 发出的signalName 的次数。

另请参阅 target 、signalName 以及clear()。

signalArguments : list [read-only]

该属性保存一个已触发信号的参数列表。每次触发该信号时,都会向列表中追加一个条目,其中包含该信号的参数。当连接到新的target 或新的signalName ,或者调用clear()方法时,signalArguments将被重置为空。

另请参阅 signalName 和clear()。

signalName : string

此属性定义了在target 上要监听的信号名称。

另请参阅 target 和count 。

target : object

该属性定义了将用于监听signalName 信号发出的目标对象。

另请参阅 signalName 和count 。

valid : bool [read-only]

该属性定义了当前信号连接状态。当“target ”的signalName 连接成功时,该属性为true;否则为false。

另请参阅 count 、target 、signalName 以及clear()。

方法文档

clear()

将count 清空为0 ,并将signalArguments 清空。不影响valid 。

另请参阅 count 和wait()。

wait(timeout = 5000)

等待target 上的signalName 信号被发出,等待时间最长为timeout 毫秒。如果该信号未被发出,则测试用例将失败。

SignalSpy {
    id: spy
    target: button
    signalName: "clicked"
}

function test_async_click() {
    ...
    // do something that will cause clicked() to be emitted
    ...
    spy.wait()
    compare(spy.count, 1)
}

可能出现两种情况:调用 wait() 时信号已发出,或者信号尚未发出。对于第一种情况,wait() 函数会立即返回。

可以使用clear() 方法丢弃已发生信号的相关信息,以使 wait() 与未来的信号发出保持同步。

另请参阅 clear() 和TestCase::tryCompare()。

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