问题标签 [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 投票
1 回答
4554 浏览

qt - 如何在 Qt 中将插槽连接到信号 QProcess::started()?

编辑:已解决。

嗨,我从 Qt 开始,我尝试将插槽连接到信号QProcess::started()但不能。QObject::connect()返回false

知道我在做什么错吗?

以下是部分代码:

我知道该过程成功启动,因为我尝试过process->WaitForStarted()并且它返回true。但是我在插槽上放了一个断点,foo::process_started()它永远不会被击中。这里有什么问题?谢谢!

0 投票
2 回答
6306 浏览

c++ - 为什么 Qt 在基类而不是派生类中寻找我的插槽?

我有我的类X,它继承自 Qt 的类Basevoid mySlot()我在我的类中声明并定义了槽,X并在 X 的构造函数中将一些信号连接到这个槽。void mySlot()但是,在运行我的程序时,我收到一条错误消息,指出在 class 中没有这样的插槽Base

为什么元对象编译器 (moc) 生成的代码在基类中而不是在我的(派生)类中寻找我的插槽?

0 投票
4 回答
2873 浏览

c++ - 插槽在 Qt 应用程序中似乎无法识别

最近一直在学习C++和Qt4,但是遇到了一个绊脚石。

我有以下类和实现:

但是,当我尝试构建并运行它时,虽然它构建得很好,但它会立即退出并显示消息

除非我做错了什么,否则 Qt 似乎无法识别插槽run()

有人可以帮忙吗?


更新:

现在的代码是:

程序仍然“意外完成”,但不再告诉我没有这样的事情QWidget::run()

0 投票
2 回答
5120 浏览

qt - 信号和插槽是如何在幕后实现的?

这个问题已经在这个论坛上问过了,但我不明白这个概念。

我正在阅读,似乎信号和插槽是使用函数指针实现的,即信号是一个大函数,它在它内部调用所有连接的插槽(函数指针)。它是否正确?而生成的moc文件在整个故事中的作用是什么?我不明白信号函数如何知道要调用哪些插槽,即哪些插槽连接到该信号。

谢谢你的时间

0 投票
1 回答
1401 浏览

c++ - boost是如何实现信号和槽的?

要继续另一个问题,让我们问这个:

Boost 如何实现信号/槽机制?

请参阅: 信号和插槽是如何在幕后实现的? http://www.boost.org/doc/libs/1_40_0/doc/html/signals.html

0 投票
3 回答
16829 浏览

c++ - Qt 信号和槽、线程、app.exec() 和相关查询

[与这个问题有关]

我写了这段代码来了解 qt 信号和槽是如何工作的。我需要有人来解释这种行为,并告诉我我自己的结论是否正确。

我的程序:

connectionhandler.h

connectionhandler.cpp

main.cpp

现在,运行此程序会将其发送到无限循环中,以寻找新的连接。

Observation:如果我不调用app.exec(),程序会立即返回(应该如此)。
Question:为什么?

Question:如果我已将插槽连接为排队连接,那么何时执行插槽调用?
Question:如果app.exec()是某种无限循环,newConnection()信号是如何发出的?

Big Question:他们这里有没有“第二条线索”?(我期待一个不,一个非常优雅的解释:))

谢谢,
jr

PS:还有谁有这种嵌套括号综合症?像“(.. :))”或“(..(..))”?

0 投票
7 回答
3827 浏览

c++ - Qt GUI 应用程序:如果 QObject::connect() 失败则发出警告?

我最近将我的 Qt 项目从 Linux 迁移到了 Vista,现在我正在盲目地调试信号。

在 Linux 上,如果 QObject::connect() 在调试构建中失败,我会在 stderr 上收到警告消息。在 Windows 上,GUI 应用程序没有控制台输出,只有一个 OutputDebugString 调用。

我已经安装了DebugView,它很好地捕获了我自己的 qDebug() 输出,但仍然没有对失败信号发出警告。

一种可能的解决方案是使用 QtCreator 的信号自动完成功能,但我喜欢 Eclipse,两者都使用是 PITA。关于如何在运行时获取信号/插槽信息的任何想法?

编辑:我刚刚意识到 connect() 返回 bool,它解决了当前的问题,尽管它可能很丑陋。但是,这并不能解决QMetaObject::connectSlotsByName()失败的情况,并且这种情况会自动与小部件一起运行。

0 投票
3 回答
1664 浏览

c++ - 基于参数值的 Qt 映射信号

我知道我可以用来QSignalMapper根据连接调用具有不同参数的插槽。我想要实现的有点不同。

我们在我们的应用程序中使用插件,不同的插件负责不同类型的对象。我们将多个插槽(每个插槽都在不同的插件中实现)连接到主应用程序发出的一个信号。信号的参数之一是QString指示与信号相关联的对象的类型。目前,我们正在插槽中检查此参数,如果该类型由插件处理,则继续。这有一个缺点,每个插件都会做这个检查,如果可能的话我想避免这种情况。

我想将所有插槽连接到同一个信号,当信号发出时,根据QString参数的值只调用适当的插槽,有点像 aQSignalMapper但以不同的方式。

是否有任何内置机制可以做到这一点?如果没有,关于我如何实现这一目标的任何想法?

先感谢您。

0 投票
2 回答
1986 浏览

qt - 是否可以将 QWidget 作为 QObject 的子对象?

我的主要应用程序对象是 a QObject,它兼顾 a QSystemTrayIcon、 a QDialog、 aQWindow和其他一些组件。该应用程序主要位于托盘中,带有一些选项对话框等。

现在,我想使用QMetaObject::connectSlotsByName()将来自这些对象的信号连接到主对象中的插槽。其中有 10 到 15 个,所以手写它们似乎效率不高,正确的,专业的,现代的等等。

但是,我不能将 myQObject作为QWidget基于对象的父对象,也不能将对象更改为 inherit QWidget,因为它们不会显示,因为主对象不可见。

想法?

0 投票
2 回答
4404 浏览

c++ - Boost 库中的信号和插槽与多线程

我在 Stackoverflow 上遇到过类似的问题,但仍然无法得到一个好的答案:

  1. boost如何实现信号和槽
  2. 信号和槽是如何实现的

我对这个信号/槽是如何实现的感到很困惑。

Q1:从下面的代码看,sig连接了两个函数(Hello()和World()),看起来函数是序列化调用的,这也暗示了,一个函数(Hello())需要在进入另一个函数(World())之前完成?=> 单线程程序

Q2:有没有启用多线程信号/槽?(=> World() 会立即启动,不需要等待 Hello() 完成。)或者如果不推荐,你介意告诉我为什么?

Boost 网站上的示例代码

输出:你好,世界!