问题标签 [signals-slots]

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 投票
4 回答
20250 浏览

c++ - Qt:槽返回值的含义?

根据文档,插槽的返回值没有任何意义。
然而,在生成的 moc 代码中,我看到如果一个插槽返回一个值,则该值用于某事。知道它有什么作用吗?


这是我正在谈论的一个例子。这取自 moc 生成的代码。'message' 是一个不返回任何内容的插槽,'selectPart' 被声明为返回 int。

0 投票
6 回答
14881 浏览

c++ - 什么是信号和插槽?

有人可以简单地解释“信号和插槽”模式吗?

0 投票
2 回答
1289 浏览

qt - .ui 中的信号和插槽连接

我已经开始使用 Qt 4。然后我遇到了Qt Designer的问题。
Signal/Slots 编辑器中,我只能设置那里列出的连接,而不是列出所有插槽。

如果我尝试在 .ui 文件中手动添加它,连接将无法正常工作。
如果我将它添加到 ui_*.h 文件中,它可以正常工作,但是当我更改设计时连接会被删除。

有人对我如何解决这个错误有什么好的建议吗?或者换个方式问:
如何让 Qt Designer 列出所有可用的插槽?

0 投票
11 回答
24831 浏览

c++ - 我应该选择哪个 C++ 信号/插槽库?

我想在不使用 QT 的项目中使用信号/插槽库。我有非常基本的要求:

  1. 用任意数量的参数连接两个函数。
  2. 信号可以连接到多个插槽。
  3. 手动断开信号/插槽连接。
  4. 体面的性能 - 应用程序是基于框架的(即不是基于事件的),我想在每个框架中使用连接。

我读过libsigc++ 和 Boost.Signals 之间的比较。我还读到 Boost.Signals 性能不佳。但是,我知道还有其他库,但我仍然不确定应该选择哪个库。

对信号/插槽库有什么建议吗?

0 投票
6 回答
3869 浏览

c++ - 保持 GUI 独立

我有一个程序(除其他外)有一个命令行界面,允许用户输入字符串,然后将通过网络发送。问题是我不确定如何将在 GUI 深处生成的事件连接到网络接口。例如,假设我的 GUI 类层次结构如下所示:

GUI -> MainWindow -> CommandLineInterface -> EntryField

每个 GUI 对象都包含其他一些 GUI 对象,并且一切都是私有的。现在 entryField 对象生成一个事件/信号,表明已输入了一条消息。目前我将信号向上传递到类层次结构中,因此 CLI 类看起来像这样:

在 c'tor 中:

passUp 函数只是再次发出信号让所属类(MainWindow)连接到,直到我终于可以在主循环中执行此操作:

现在这似乎是一个非常糟糕的解决方案。每次我向 GUI 添加一些东西时,我都必须通过类层次结构将它连接起来。我确实看到了几种解决方法。我可以公开所有对象,这样我就可以在主循环中执行此操作:

但这会违背封装的想法。我还可以在整个 GUI 中传递对网络接口的引用,但我希望 GUI 代码尽可能独立。

感觉就像我在这里遗漏了一些重要的东西。有没有一种干净的方法可以做到这一点?

注意:我正在使用 GTK+/gtkmm/LibSigC++,但我没有这样标记它,因为我在 Qt 上遇到了几乎相同的问题。这真的是一个普遍的问题。

0 投票
3 回答
8264 浏览

qt - 如何将信号连接到不同线程中的插槽?

Qt 通常在单个线程中使用信号和槽,因此调用信号将在调用信号的同一线程中调用槽。有什么方法可以使用信号槽机制将消息传递给 qt 线程(因此稍后将在指定线程的上下文中调用槽)?

0 投票
3 回答
88418 浏览

c++ - 如何在 Qt 中发出跨线程信号?

Qt 文档指出信号和槽可以是direct,queuedauto.

它还指出,如果拥有插槽的对象“生活”在与拥有信号的对象不同的线程中,则发出这样的信号就像发布消息一样——信号发出将立即返回,并且插槽方法将在目标线程的事件循环中被调用。

不幸的是,文档没有具体说明“生活”代表什么,也没有可用的示例。我尝试了以下代码:

main.h:

main.cpp:

输出是:

MySlot()永远不会被调用:(。我做错了什么?

0 投票
4 回答
1560 浏览

c++ - Qt4 现有插槽无法识别

我目前正在尝试使用 Qt4 和 C++ 完成一个项目。我正在使用按钮在状态之间切换。在尝试将按钮的 clicked() 信号连接到 textEdit 以显示相关状态时,我遇到了一个错误:

Object::connect 没有这样的插槽 QTextEdit::append("move state") Object::connect 没有这样的插槽 QTextEdit::append("link state")

只是,QTextEdit 肯定有一个 append(QString) 插槽。

有任何想法吗?

一些代码示例:

0 投票
1 回答
1003 浏览

c++ - 信号槽架构最佳实践

我正在使用 libsigc++ 连接应用程序,并且不确定更简单的方法。

有一个预先存在的对象层次结构来管理数据层,并且顶层对象公开了所有功能。到目前为止一切都很好。

为此,我添加了一个 GUI 对象层次结构,并在应用程序对象中将它们与信号连接挂钩。要建立连接,我需要指向发送者和接收者的指针。

现在,我是否直接在树中很远的地方挂接子小部件,从而需要在树上上下传递指针?

或者,我是否在链中的每一步都经历了挂接信号和插槽的艰苦过程?

一方面,传递指针打破了 sig-slot 模型给你带来的分离。另一方面,在每一步创建连接似乎与 sig-slot 应该提供的所谓的“事件心灵感应”不符。

有此模型经验的人会考虑使用默认方法吗?

0 投票
1 回答
3038 浏览

qt - 初学者 Qt 信号和插槽问题

我刚刚开始学习 Qt,这是我对 GUI 的第一次体验。到目前为止,它只是控制台应用程序和一些 SDL。

我对整个信号和插槽的事情感到非常困惑。我刚刚完成教程 11。当您按下射击时,射击按钮会发送一个信号,该信号连接到炮台中的插槽,用于“射击”功能。拍摄功能启动一个计时器,它每 5 毫秒发出一个信号,告诉拍摄向前移动一帧。我明白了。

我尝试放置一个 0 到 999 的 for 循环,将 i 发送到应用程序输出,这样我就可以看到发生了什么。这就是我开始感到困惑的地方。有时,它会开始打印 0、1、2、3 等,然后输入一些(比如 10)然后发射镜头,然后当镜头离开屏幕时,它会打印剩余的 999。其他时候它什么也不打印, 开枪,然后打印 0 到 999。其他时候它会打印所有内容,然后开枪。我只是在程序运行的同时观看 Qt Creator 中的输出而让自己感到困惑吗?