问题标签 [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 回答
4447 浏览

c++ - Deletion of objects send by signals, Ownership of objects in signals, Qt

Here, my signal declaration:

And how I'm using it:

Here comes my problem: Who is responsible for deletion of myObject:

  1. Sender code, what if it deletes before myObject is used? Dangling Pointer

  2. The slot connected to signal, what if there is no slot or more than one slot which is connected to the signal? Memory Leak or Dangling Pointer

How does Qt manage this situation in its build-in signals? Does it use internal reference counting?

What are your best practices?

0 投票
1 回答
532 浏览

qt - 在qt中使用信号/槽替换背景图像的问题

我想做一个简单的国际象棋程序。到目前为止,我已经使用 QTableWidget 制作了电路板并将图片加载到表格的单元格中。现在我想使用信号和插槽,这样当用户单击一个单元格然后单击另一个单元格时,第一个单元格的图片会转到第二个单元格,但我不知道该怎么做。

请注意,我不希望这些“棋子移动”遵守真正的国际象棋规则。我只需要在两个单元格之间进行图片替换。以后我会让他们遵守规则。

这是代码。在此代码中,只有表的 item(0,0) 有图片。谁能说如何编写代码,以便当我单击该项目然后单击项目(1,1)时,图片“1.bmp”进入项目(1,1)的背景?

0 投票
1 回答
2098 浏览

c++ - 插件中的 qt 信号/插槽

我有一个具有这种结构的应用程序:所有数据类型 ( class INode) 都存储在插件 (DLL) 中。可以绘制一些数据类型(如果它们是IDrawable)。

要加载一个对象,例如,class PointCloudNode: public INode我有一个特殊的输入插件(DLL),它被调用class PointCloudParser: public IIOPlugin并且IIOPlugin是一个具有某些特定功能的线程:class IIOPlugin: public QThread.

所有对象均由NodeFactory类创建,该类是存储在单独 DLL 中的单例。

这就是问题所在:

如果我从任何线程(主线程或输入插件线程)执行此操作

更新启动,tmptmp()发出信号,插槽 ( drawObject()) 正确执行。

但是 如果做同样的事情,但是在我的输入插件中创建对象,传递共享指针并在另一个函数中执行,尽管所有代码都被执行(包括等),但永远不会进入dr->update()插槽。drawObject()connect

更准确地说,这里是输入插件:

最后一个发射连接到这个:

怎么来的?node对象自始至终都是一样的,它是有效的。启动代码中的每一行,QObject::connect都不向调试窗口写入任何内容,tmptmp()发出信号,但drawObject()在一种情况下从未到达插槽?有任何想法吗?

更新。:如果我不继承IIOPluginQThread,一切正常(即在主线程中加载对象)。我希望信号/插槽能够跨线程工作......

0 投票
1 回答
398 浏览

c++ - Qt4 插槽和信号:Qt4 无法找到信号

我正在尝试使用 QGLWidget 内容的 FPS 更新状态栏。我将它们连接如下(在 MainWin 类中):

插槽如下:

在 MainWin 类定义中,我有:

信号如下:(据我了解,这不应该在这里,但程序拒绝在没有它的情况下编译)。

我在 GLWidget 类定义中有以下内容:

计算 fps 后,我调用:

但是,当应用程序启动时,会打印出以下内容:

我读过的所有教程似乎都没有任何帮助,而且我相信对于更有经验的人来说修复很简单。

谢谢。

0 投票
2 回答
3275 浏览

python - PyQt4 自定义对话框未显示

我正在使用 PyQt4 制作一个简单的 Python GUI 应用程序。

情况如下:

我有一个QMainWindow显示中央小部件和一个包含此自定义小部件的 QDockWidget:

我基本上想在单击 addButton 时显示这个自定义对话框类:

但这不起作用。我设法通过将 addTag 方法更改为:

但我对内联对话框的创建不满意。我的错误是什么?谢谢你。

编辑

问题出在自定义对话框类构造函数上:

0 投票
2 回答
2804 浏览

qt - Qt 信号继承?

编辑:我提供了一个答案,但我很乐意接受另一个提供解释的答案。

我进行了子类QPushButton化以添加一些功能,但是在将clicked信号连接到插槽后,它不会被调用。如果我使用香草 QPushButton,并且不更改任何其他内容,它就可以工作。这是代码:

这就是我连接信号的方式:

这里可能有什么问题?

0 投票
1 回答
1646 浏览

qt - 调用 quit() 后清理 QThread

我有个问题。如果我调用 Abort(),运行函数将返回,而 complexMath 实例没有足够的时间进行清理。

我想要的是,在调用 Abort() 之后,complexMath 实例有足够的时间自行关闭,在返回之前清除所有挂起的信号和插槽(在 complexMath 内部,它也有自己的信号和插槽)。

谢谢!

0 投票
1 回答
2874 浏览

python - 如何强制 matplotlib 更新绘图

我正在尝试构建一个小 GUI,它有一个每次读取新数据样本时都会更新的图。我不希望使用计时器运行它,因为数据将以不同的时间间隔到达。相反,我正在尝试使用信号进行实现,其中数据收集函数将在读取数据时发出信号,然后绘画函数将在绘画完成时发出信号。

现在出现的问题是,一旦我调用canvas.draw(),画布就没有更新。当这个程序运行时, data_collect() 和 paint() 交替发送信号,但是直到我停止该过程之后,数字才会更新。每当调用paint() 时,如何强制matplotlib 更新图形?

下面是一段相对简单的示例代码,它不是最佳的,但希望能传达我正在尝试做的事情的味道......

0 投票
3 回答
18245 浏览

qt - Qt Signals 和 Slot 连接了两次......会发生什么?

如果相同的信号和插槽连接两次会发生什么?

机制如何处理?

0 投票
8 回答
50659 浏览

c++ - 在 Qt 中防止触发信号

我们有一个QCheckBox对象,当用户检查它或删除检查时,我们想调用一个函数,因此我们将函数连接到stateChanged ( int state )信号。另一方面,根据某些情况,我们也会改变QCheckBox代码内部对象的状态,这会导致不需要的信号。

在某些情况下有什么方法可以防止触发信号吗?