问题标签 [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.
c++ - 监控/输出发出的 Qt 信号
我定义了一些在不同场合发出的信号:
现在我只想看看这些信号的样子以及参数是否正确。似乎有几种方法可以监控信号。
在这里的帖子中,rohanpm 指的是在-vs
此处更接近指定的参数:http:
//qt-project.org/doc/qt-4.8/qtestlib-manual.html#qtestlib-command-line-arguments
这似乎是获取所需信息的一种优雅而快捷的方式。但老实说,我无法理解我必须如何以及在哪里运行-vs
。它不是qmake
. 我还要把它放在哪里?(我对qt很陌生)。
与QSignalSpy相关,似乎有必要更改现有类?不是也有“外部”方法吗?
有很多关于如何测试插槽的文档 - 但与信号有关?我可以使用 aprintf
或cout
某处吗?
c++ - QSignalSpy 不能与线程一起使用
我写了一个执行工作对象的线程。一切正常。生成的信号也会按应有的方式发出。当然,我处理了有关线程/对象关联的常见错误。
今天我为这些工作线程/线程编写了一个自动化模块测试。我创建了一个 QSignalSpy 来等待工作对象(已移动到线程)发出的信号,如下所示:
我在标记的行中遇到了一个众所周知的错误:
首先,我预计会出现错误,因为 wait() 中的某些代码是在错误的线程中执行的。然后在QSignalSpy的实现中发现了如下代码:
这显然意味着 QSignalSpy 一直使用 DirectConnection 并且不能用于监视生活在不同线程中的对象的信号。
为什么他们在 Qt5.3 中这样编程?这是一个错误还是预期的行为?我该如何解决这个限制?
qt - QML:未在单元测试中调用信号
我正在编写一个ScriptProcess
用于 QML 的 C++ 类,它充当子进程的接口。所述子进程加载脚本,然后按需执行功能。当您调用函数时,结果(无论是值还是异常)通过信号异步返回。
简而言之,我执行以下操作:
- 对于每个测试,打开辅助进程并从文件加载脚本。这是通过使用通过属性
Component
给出的脚本实例化 a 来完成的。ScriptProcess.code
- 运行测试。
- 测试完成后,终止进程并删除管理它的对象。
我的问题是SignalSpy
被叫exceptionSpy
没有被触发;exceptionSpy.count
总是零,我不知道为什么。 为什么会这样?我是在滥用SignalSpy
还是Component
?
c++ - QSignalSpy 和 std::shared_ptr
我想测试一段 Qt 代码,它使用带有 std::shared_ptr 作为参数的信号/插槽。
我的问题是,对于所有其他类型的参数都适用的 QSignalSpy 类在使用标准共享指针时似乎表现不佳。实际上,takeFirst 方法返回一个 QVariant 列表。我可以将参数转换为 shared_ptr 做类似的事情:
但是后来我得到了 2 个引用相同堆内存的智能指针,并且在超出当前范围时它崩溃了。有没有办法在我的情况下使用 QSignalSpy ?
谢谢 !
c++ - 如何使用 QTestLib 等待 QWidget 关闭?[Qt5]
我正在QTest
为一个派生自QWidget
.
显示小部件后,我希望在小部件关闭后立即结束测试。
我第一次尝试是用QSignalSpy
的,结果发现QWidget
真的不发出信号了close()
。
那么使用QTest
原语执行此操作的“正确方法”是什么?
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 信号吗?
qt - QSignalSpy 未捕获到信号
我目前正在为我的一门课程编写一些单元测试。但是,我很快遇到了一个问题。似乎 QSignalSpy 有时无法捕捉到我的班级disconnected()
发出的信号。Client
这是我的单元测试:
以下是相关的类方法:
有没有人解释为什么 QSignalSpy.wait() 方法返回 false,即使通过调试单元测试,我知道disconnected()
信号已发出?
谢谢!
c++ - QSignalSpy::wait(...) 失败,当 QTest::qWait(...) 成功时
这是一个令人困惑的情况。在测试 QStateMachine 的状态转换时,以下代码无法监视导致转换的信号。
以下代码通过了测试!
我还可以在外部验证信号是否正在使用 dbus-monitor 发出。
我可以继续使用 QTest::qWait,这没什么大不了的,但我只是对为什么 spy.wait 不起作用感到困惑。
干杯,西蒙
c++ - 信号中的冗余命名空间声明以使用 QSignalSpy
我正在尝试QTest
结合使用Catch
并QSignalSpy
测试我的应用程序。我不得不说,我使用的是 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 。