问题标签 [qsignalspy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
612 浏览

c++ - 监控/输出发出的 Qt 信号

我定义了一些在不同场合发出的信号:

现在我只想看看这些信号的样子以及参数是否正确。似乎有几种方法可以监控信号。

在这里的帖子中,rohanpm 指的是在-vs此处更接近指定的参数:http: //qt-project.org/doc/qt-4.8/qtestlib-manual.html#qtestlib-command-line-arguments

这似乎是获取所需信息的一种优雅而快捷的方式。但老实说,我无法理解我必须如何以及在哪里运行-vs。它不是qmake. 我还要把它放在哪里?(我对qt很陌生)。

QSignalSpy相关,似乎有必要更改现有类?不是也有“外部”方法吗?

有很多关于如何测试插槽的文档 - 但与信号有关?我可以使用 aprintfcout某处吗?

0 投票
2 回答
2012 浏览

c++ - QSignalSpy 不能与线程一起使用

我写了一个执行工作对象的线程。一切正常。生成的信号也会按应有的方式发出。当然,我处理了有关线程/对象关联的常见错误。

今天我为这些工作线程/线程编写了一个自动化模块测试。我创建了一个 QSignalSpy 来等待工作对象(已移动到线程)发出的信号,如下所示:

我在标记的行中遇到了一个众所周知的错误:

首先,我预计会出现错误,因为 wait() 中的某些代码是在错误的线程中执行的。然后在QSignalSpy的实现中发现了如下代码:

这显然意味着 QSignalSpy 一直使用 DirectConnection 并且不能用于监视生活在不同线程中的对象的信号。

为什么他们在 Qt5.3 中这样编程?这是一个错误还是预期的行为?我该如何解决这个限制?

0 投票
1 回答
404 浏览

qt - QML:未在单元测试中调用信号

我正在编写一个ScriptProcess用于 QML 的 C++ 类,它充当子进程的接口。所述子进程加载脚本,然后按需执行功能。当您调用函数时,结果(无论是值还是异常)通过信号异步返回。

简而言之,我执行以下操作:

  1. 对于每个测试,打开辅助进程并从文件加载脚本。这是通过使用通过属性Component给出的脚本实例化 a 来完成的。ScriptProcess.code
  2. 运行测试。
  3. 测试完成后,终止进程并删除管理它的对象。

我的问题是SignalSpy被叫exceptionSpy没有被触发;exceptionSpy.count总是零,我不知道为什么。 为什么会这样?我是在滥用SignalSpy还是Component

0 投票
1 回答
273 浏览

c++ - QSignalSpy 和 std::shared_ptr

我想测试一段 Qt 代码,它使用带有 std::shared_ptr 作为参数的信号/插槽。

我的问题是,对于所有其他类型的参数都适用的 QSignalSpy 类在使用标准共享指针时似乎表现不佳。实际上,takeFirst 方法返回一个 QVariant 列表。我可以将参数转换为 shared_ptr 做类似的事情:

但是后来我得到了 2 个引用相同堆内存的智能指针,并且在超出当前范围时它崩溃了。有没有办法在我的情况下使用 QSignalSpy ?

谢谢 !

0 投票
1 回答
238 浏览

c++ - 如何使用 QTestLib 等待 QWidget 关闭?[Qt5]

我正在QTest为一个派生自QWidget.

显示小部件后,我希望在小部件关闭后立即结束测试。

我第一次尝试是用QSignalSpy的,结果发现QWidget真的不发出信号了close()

那么使用QTest原语执行此操作的“正确方法”是什么?

0 投票
1 回答
278 浏览

qt - 用我自己的班级测试信号

我有一些班级可以与我的班级发出一些信号。例子:

我为 CMainClass 编写了 unix 测试:

标题:

资源:

但是,在日志文件中我有:

PASS : CTestCommandProcessor::initTestCase() QDEBUG : CTestCommandProcessor::testS() 测试信号发射器 QDEBUG : CTestCommandProcessor::testS() Count: 1 QDEBUG : CTestCommandProcessor::testS() Vals: QVariant(CMyClass, ) C 中发生崩溃:\UnitTest\build-UnitTest-Qt_5_7_1_5_7_1_Static-Release\release\UnitTest.exe。功能时间:0ms 总时间:0ms

我试图改变字符串:

CMyClass buf = qvariant_cast< CMyClass >(spy.at(0).at(0));

CMyClass buf = qvariant_cast< const CMyClass& >(spy.at(0).at(0));

但是,我遇到了同样的错误。怎么了?我可以在我自己的类中使用 Qt 的 unittest 信号吗?

0 投票
1 回答
657 浏览

qt - QSignalSpy 未捕获到信号

我目前正在为我的一门课程编写一些单元测试。但是,我很快遇到了一个问题。似乎 QSignalSpy 有时无法捕捉到我的班级disconnected()发出的信号。Client这是我的单元测试:

以下是相关的类方法:

有没有人解释为什么 QSignalSpy.wait() 方法返回 false,即使通过调试单元测试,我知道disconnected()信号已发出?

谢谢!

0 投票
1 回答
673 浏览

c++ - QSignalSpy::wait(...) 失败,当 QTest::qWait(...) 成功时

这是一个令人困惑的情况。在测试 QStateMachine 的状态转换时,以下代码无法监视导致转换的信号。

以下代码通过了测试!

我还可以在外部验证信号是否正在使用 dbus-monitor 发出。

我可以继续使用 QTest::qWait,这没什么大不了的,但我只是对为什么 spy.wait 不起作用感到困惑。

干杯,西蒙

0 投票
0 回答
267 浏览

c++ - 信号中的冗余命名空间声明以使用 QSignalSpy

我正在尝试QTest结合使用CatchQSignalSpy测试我的应用程序。我不得不说,我使用的是 Qt 5.10.0,这可能很重要。

最近我偶然发现了一种奇怪的行为,我无法真正解释。

主文件

测试用例.h

测试对象.h

如果我将运行发布的代码,我将获得以下输出,这对我来说很好。

但是,如果我将行更改void objectChanged(const nameSpace::MyObject&);void objectChanged(const MyObject&);我获得以下错误输出:

所以有必要在信号定义中包含看似多余的命名空间。搜索并找到这个错误花了我半天时间,现在我也想了解这种行为的可能原因。这是故意的还是 Qt Bug?如果是故意的,那么 Qt 文档中的这个位置在哪里。

这有点类似于为什么必须写

代替

请参阅文档:https ://doc.qt.io/qt-5/qmetatype.html#Q_DECLARE_METATYPE 。