问题标签 [qt-signals]

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 投票
3 回答
88418 浏览

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

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

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

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

main.h:

main.cpp:

输出是:

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

0 投票
7 回答
37403 浏览

qt - 私人/公共 qt 信号

Qt 信号可以是公共的还是私有的?我可以创建仅在课堂内可见的内部信号吗?

更新:我有一个带有一些内部信号的类。如何使这些信号对其他类不可见(封装和信息隐藏)?

0 投票
5 回答
3600 浏览

c++ - 何时使用信号和插槽,何时不使用

我们使用的 Qt 提供了我觉得非常方便的信号和插槽。然而,强大的力量伴随着巨大的责任,我认为很容易滥用这个功能。

是否有信号槽使用的最佳实践?我很难以这种方式找到一些通用指南。一些问题(我对此有明确的看法,但并非我团队的所有成员都同意):

  • 可以用信号报错吗?
  • 可以假设将处理信号吗?
  • 信号可以用来启动动作吗?例如signal displayInfoScreen(),必须由显示信息屏幕的插槽处理。

非常欢迎关于何时应该/不应该使用信号的任何其他意见!

0 投票
0 回答
3044 浏览

c++ - Qt 信号和槽中的内存泄漏

我在我的 Qt 代码上运行 valgrind,即使成功退出应用程序,我也从 valgrind 获得以下报告:

我断开所有信号连接并删除对象。如果我增加信号和插槽连接的数量,上述泄漏会增加。

有人可以帮忙吗?

0 投票
3 回答
19032 浏览

qt - 等待信号

我正在开发一个将文件内容上传到服务器的应用程序。

要将文件上传到服务器,我正在使用“QNetworkAccessManager”类。由于它以异步方式工作,因此我使用 QEventLoop 将其更改为以同步方式工作。

在我的示例应用程序中,我有 2 个窗口。第一个选择文件,第二个显示进度。

当用户单击第一个窗口中的上传按钮时,将显示第二个窗口,然后我创建FileTransfer对象并开始上传。

如果用户关闭表单,则在上传文件时,然后在窗口的析构函数中调用“<em>FileTransfer”的停止,然后删除“<em>FileTransfer”对象。

但是这里的Upload()函数还没有完成,所以它会崩溃。

请帮我:如何在“stop() ”函数中等待,直到 Upload() 函数完成

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 投票
2 回答
7751 浏览

c++ - 使用具有多重继承的 Qt 信号和槽

我有一个类 ( MyClass),它从 Qt 内置对象 ( QGraphicsTextItem) 继承了它的大部分功能。QGraphicsTextItem间接继承自QObject. MyClass还实现了一个接口,MyInterface.

我需要能够使用connectdisconnect打开MyInterface*. 但它似乎connectdisconnect适用于QObject*实例。由于 Qt 不支持从 QObject 派生类进行多重继承,因此我无法MyInterfaceQObject. (无论如何,这对接口也没有多大意义。)

网上对此问题进行了讨论,但 IMO 提出的解决方案在常见情况下(通过其接口访问对象)相当无用,因为您无法连接信号和插槽,MyInterface*但必须将其转换为派生类型。由于MyClass是许多 -MyInterface派生类之一,这将需要“代码异味” if-this-cast-to-this-else-if-that-c​​ast-to-that 语句并破坏接口的目的。

这个限制有没有好的解决方案?

更新:我注意到如果我dynamic_casta MyInterface*to QObject*(因为我知道所有MyInterface派生类最终也继承自QObject,它似乎工作。那是:

但这真的好像我在要求未定义的行为......

0 投票
3 回答
14488 浏览

c++ - C ++ Qt信号和插槽未触发

我的 Qt 程序在将按钮信号连接到我的插槽时遇到困难。我的代码是:

主文件

MainWidget.h

MainWidget.cpp

该程序输出以下内容:

代码似乎正确,没有编译器警告。只是运行时的这个输出。但看起来我正确连接了信号和插槽。

0 投票
2 回答
12228 浏览

c++ - Qt/C++:检查 QListWidgetItem 时的信号?

在我的表格中,我有一个QListWidget包含 checkable的内容QListWidgetItems。我正在寻找一种方法来捕获QListWidgetItem被选中/未选中的事件。我没有看到任何这样的信号存在,但也许我错了。我目前正在做的是使用QListWidget::itemClicked()信号并检查 的checkStateQListWidgetItem但这不是我想要的,因为只要单击该项目就会发生此事件,而不仅仅是切换复选标记。任何人都可以提供一些帮助吗?谢谢!

0 投票
4 回答
56412 浏览

qt - 关于 Qt 中的信号和插槽,delete 和 deleteLater 是如何工作的?

有一个 QNetworkReply 类的对象。有一个插槽(在其他对象中)连接到它的finished() 信号。信号是同步的(默认的)。只有一个线程。

在某个时刻,我想摆脱这两个对象。没有更多的信号或来自他们的任何东西。我要他们走。好吧,我想,我会用

但我真的可以吗?~QObject 的规格说:

在挂起的事件等待交付时删除 QObject 可能会导致崩溃。

什么是“未决事件”?这是否意味着当我打电话给 mydelete时,已经有一些“待处理的事件”要交付,它们可能会导致崩溃,我无法真正检查是否有任何事件?

所以假设我打电话:

为了安全。

但是,我真的安全吗?添加了一个事件,当控制到达那里时,该deleteLater事件将在主循环中处理。是否有一些待处理的事件(信号)obj1或已经存在,在处理deleteLater之前obj2等待在主循环中处理?那将是非常不幸的。我不想编写代码检查“有点删除”状态并忽略我所有插槽中的传入信号。