【问题标题】:What is the value of the parameter参数的值是多少
【发布时间】:2022-01-13 06:50:11
【问题描述】:

我正在学习 C++ 中的无人机编程。我找到了这个功能:

void Vehicle::_announceArmedChanged(bool armed)

但是我搜索的时候,所有的代码都调用了这个函数,不带参数,比如:

connect(this, &Vehicle::armedChanged, this, &Vehicle::_announceArmedChanged);

在这种情况下,程序从哪里获得armed 状态?

【问题讨论】:

  • 您可能正在查看定义,而声明可能声明了默认参数。见这里:stackoverflow.com/questions/4989483/…
  • @463035818_is_not_a_number connect 将成员函数作为参数 ;)
  • 等一下...connect(this, &Vehicle::armedChanged, this, &Vehicle::_announceArmedChanged); 没有调用该函数。它将函数指针传递给connect,该函数在其他地方被调用
  • 这看起来像一个 Qt 信号/槽连接,它实际上只是创建了一个路径,信号通过该路径发出一个值并将其传递给一个槽。但它不执行该操作。寻找像 emit armedChanged(true); 或其他涉及 armedChanged 的连接,这些连接可能会链接来自其他地方的信号(例如按钮“按下”信号)
  • 这实际上是一个“特定于 Qt”的问题。您使用此函数注册回调。每次调用anncounceArmedChanged,都会触发信号armedChanged。这个调用将包含传递给信号的任何参数。

标签: c++ qt drone


【解决方案1】:

在这种情况下,announceArmedChanged() 是一个回调函数。您显示的代码不是调用 announceArmedChanged()。它将announceArmedChanged内存地址传递给Qt框架的QObject::connect(),它会记住该地址并将其与指定的armedChanged事件相关联。当其他代码稍后使用适当的状态值触发 armedChanged 事件时,将使用该值调用 announceArmedChanged()

阅读 Qt 文档中的Signals & Slots 了解更多详情。

【讨论】:

  • 关键字,粗体,斜体,关键字链接,链接.... BINGO! ;)
【解决方案2】:

指向成员函数的指针

指向非静态成员函数f 的指针,它是类C 的成员,可以完全用表达式&C::f 初始化。 C 的成员函数中的 &(C::f)&f 等表达式不会形成指向成员函数的指针。

https://en.cppreference.com/w/cpp/language/pointer

【讨论】:

  • 虽然在技术上很有用,但这确实无法回答 OP 的问题。
  • 不询问指针的语法。它是一个指针的事实是答案解释的一部分,但答案是“armed 来自哪里?”根本没有给出。
【解决方案3】:

“armedChanged”是一个信号,当“emit armedChanged(true);”时,该信号调用“_announceArmedChanged”槽或“发出armedChanged(假);”叫。 在这种情况下,信号和插槽都属于同一类;

【讨论】:

    猜你喜欢
    • 2011-02-10
    • 2020-02-07
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多