问题标签 [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.
qt - 如何在 Qt 中将插槽连接到信号 QProcess::started()?
编辑:已解决。
嗨,我从 Qt 开始,我尝试将插槽连接到信号QProcess::started()
但不能。QObject::connect()
返回false
。
知道我在做什么错吗?
以下是部分代码:
我知道该过程成功启动,因为我尝试过process->WaitForStarted()
并且它返回true
。但是我在插槽上放了一个断点,foo::process_started()
它永远不会被击中。这里有什么问题?谢谢!
c++ - 为什么 Qt 在基类而不是派生类中寻找我的插槽?
我有我的类X
,它继承自 Qt 的类Base
。void mySlot()
我在我的类中声明并定义了槽,X
并在 X 的构造函数中将一些信号连接到这个槽。void mySlot()
但是,在运行我的程序时,我收到一条错误消息,指出在 class 中没有这样的插槽Base
。
为什么元对象编译器 (moc) 生成的代码在基类中而不是在我的(派生)类中寻找我的插槽?
c++ - 插槽在 Qt 应用程序中似乎无法识别
最近一直在学习C++和Qt4,但是遇到了一个绊脚石。
我有以下类和实现:
和
但是,当我尝试构建并运行它时,虽然它构建得很好,但它会立即退出并显示消息
除非我做错了什么,否则 Qt 似乎无法识别插槽run()
有人可以帮忙吗?
更新:
现在的代码是:
和
程序仍然“意外完成”,但不再告诉我没有这样的事情QWidget::run()
qt - 信号和插槽是如何在幕后实现的?
这个问题已经在这个论坛上问过了,但我不明白这个概念。
我正在阅读,似乎信号和插槽是使用函数指针实现的,即信号是一个大函数,它在它内部调用所有连接的插槽(函数指针)。它是否正确?而生成的moc文件在整个故事中的作用是什么?我不明白信号函数如何知道要调用哪些插槽,即哪些插槽连接到该信号。
谢谢你的时间
c++ - boost是如何实现信号和槽的?
要继续另一个问题,让我们问这个:
Boost 如何实现信号/槽机制?
请参阅: 信号和插槽是如何在幕后实现的? http://www.boost.org/doc/libs/1_40_0/doc/html/signals.html
c++ - Qt 信号和槽、线程、app.exec() 和相关查询
[与这个问题有关]
我写了这段代码来了解 qt 信号和槽是如何工作的。我需要有人来解释这种行为,并告诉我我自己的结论是否正确。
我的程序:
connectionhandler.h
connectionhandler.cpp
main.cpp
现在,运行此程序会将其发送到无限循环中,以寻找新的连接。
Observation:
如果我不调用app.exec()
,程序会立即返回(应该如此)。
Question:
为什么?
Question:
如果我已将插槽连接为排队连接,那么何时执行插槽调用?
Question:
如果app.exec()
是某种无限循环,newConnection()
信号是如何发出的?
Big Question:
他们这里有没有“第二条线索”?(我期待一个不,一个非常优雅的解释:))
谢谢,
jr
PS:还有谁有这种嵌套括号综合症?像“(.. :))”或“(..(..))”?
c++ - Qt GUI 应用程序:如果 QObject::connect() 失败则发出警告?
我最近将我的 Qt 项目从 Linux 迁移到了 Vista,现在我正在盲目地调试信号。
在 Linux 上,如果 QObject::connect() 在调试构建中失败,我会在 stderr 上收到警告消息。在 Windows 上,GUI 应用程序没有控制台输出,只有一个 OutputDebugString 调用。
我已经安装了DebugView,它很好地捕获了我自己的 qDebug() 输出,但仍然没有对失败信号发出警告。
一种可能的解决方案是使用 QtCreator 的信号自动完成功能,但我喜欢 Eclipse,两者都使用是 PITA。关于如何在运行时获取信号/插槽信息的任何想法?
编辑:我刚刚意识到 connect() 返回 bool,它解决了当前的问题,尽管它可能很丑陋。但是,这并不能解决QMetaObject::connectSlotsByName()失败的情况,并且这种情况会自动与小部件一起运行。
c++ - 基于参数值的 Qt 映射信号
我知道我可以用来QSignalMapper
根据连接调用具有不同参数的插槽。我想要实现的有点不同。
我们在我们的应用程序中使用插件,不同的插件负责不同类型的对象。我们将多个插槽(每个插槽都在不同的插件中实现)连接到主应用程序发出的一个信号。信号的参数之一是QString
指示与信号相关联的对象的类型。目前,我们正在插槽中检查此参数,如果该类型由插件处理,则继续。这有一个缺点,每个插件都会做这个检查,如果可能的话我想避免这种情况。
我想将所有插槽连接到同一个信号,当信号发出时,根据QString
参数的值只调用适当的插槽,有点像 aQSignalMapper
但以不同的方式。
是否有任何内置机制可以做到这一点?如果没有,关于我如何实现这一目标的任何想法?
先感谢您。
qt - 是否可以将 QWidget 作为 QObject 的子对象?
我的主要应用程序对象是 a QObject
,它兼顾 a QSystemTrayIcon
、 a QDialog
、 aQWindow
和其他一些组件。该应用程序主要位于托盘中,带有一些选项对话框等。
现在,我想使用QMetaObject::connectSlotsByName()
将来自这些对象的信号连接到主对象中的插槽。其中有 10 到 15 个,所以手写它们似乎效率不高,正确的,专业的,现代的等等。
但是,我不能将 myQObject
作为QWidget
基于对象的父对象,也不能将对象更改为 inherit QWidget
,因为它们不会显示,因为主对象不可见。
想法?
c++ - Boost 库中的信号和插槽与多线程
我在 Stackoverflow 上遇到过类似的问题,但仍然无法得到一个好的答案:
我对这个信号/槽是如何实现的感到很困惑。
Q1:从下面的代码看,sig连接了两个函数(Hello()和World()),看起来函数是序列化调用的,这也暗示了,一个函数(Hello())需要在进入另一个函数(World())之前完成?=> 单线程程序
Q2:有没有启用多线程信号/槽?(=> World() 会立即启动,不需要等待 Hello() 完成。)或者如果不推荐,你介意告诉我为什么?
输出:你好,世界!