【问题标题】:Monitor/Output emitted Qt-Signals监控/输出发出的 Qt 信号
【发布时间】:2014-06-03 15:13:22
【问题描述】:

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

signals:
    void buttonXClicked(int x);
    void numButtonsChanged(int num);

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

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

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

QSignalSpy相关的好像有必要改一下现有的类吧?不是也有“外部”方法吗?

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

【问题讨论】:

    标签: c++ qt qt4 qtestlib qsignalspy


    【解决方案1】:

    我在阅读有关 moc 及其功能的更多信息时产生了这个想法。 (至少在使用 NetBeans 时)我在文件 ButtonTest.cpp 之外获得了 moc_ButtonTest.cpp 文件。里面有个方法叫:

    // SIGNAL 0
    void ButtonTest::buttonXClicked(int _t1)
    {
        void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
        QMetaObject::activate(this, &staticMetaObject, 0, _a);    
    }
    

    我简直不敢相信它是如此简单,但我刚刚添加了一个

    std::cout <<"buttonXClicked: "<<_t1;
    

    它似乎完全符合我的要求。

    【讨论】:

      【解决方案2】:

      正如链接文档所写:

      使用所有可用的测试数据运行 toUpper 测试函数,并使用称为零的测试数据运行 toInt 测试函数(如果指定的测试数据不存在,则关联的测试将失败)。

      /myTestDirectory$ testMyWidget -vs -eventdelay 500
      

      其中 testMyWidget 是构建的测试二进制文件。这是-vs 文档:

      -vs 输出每个发出的信号

      如果您 grep 帮助输出,还有更多文档:

      /myTestDirectory$ testMyWidget --help | grep "\-vs"
      -vs outputs every signal that gets emitted
      

      如果您碰巧在编写基于 QTestLib 的单元测试时遇到问题,那么这是 Qt 4 的一个很好的起点:

      QTestLib Manual

      【讨论】:

      • 我也试过了。我创建了一个 qttest.pro,然后运行 ​​qmake 并制作。要执行它,我需要使用./qttest,但如果我使用我们的不带参数运行它,则没有任何变化
      • 那么你要么做错了,要么根本没有发出信号,这可能是由于几个原因,例如糟糕的测试代码等。没有更多细节很难说,但无论如何,你的问题是,在我的理解中,这个选项应该放在哪里,这篇文章回答了这个问题。 ;-) 其他所有问题都会使您的问题过于宽泛。
      • 我想我做错了:D - 你是否有一个小程序在某个地方,它确实可以工作并输出一些有意义的东西?
      • @Qohelet:只运行 qt 测试。
      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 2017-10-02
      • 1970-01-01
      相关资源
      最近更新 更多