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

qt - QEventLoop 使用(信号和槽)

我有一个包含这些行的应用程序。

信号改变了 的值currentWindowIndex,但是由于槽的原因它没有工作,它没有及时改变它的值。有人建议我使用QEventLoop,但我不明白如何做到这一点。请给我一个例子。代码的另一部分:

我认为它可以提供帮助。

MyMdAreais сclass 继承自QMdiArea, WorkSpaceis a QWidget, TabsListis a QTabBar。还有一个事实:我试图了解插槽的执行顺序并在代码中添加了一些行:

发出WindowAdded信号后

发出addedWindowIndex信号后

改变后currentWindowIndex的价值

这就是我看到的“1 2 3”,它让我的大脑爆炸了。也许我不明白什么?

0 投票
1 回答
197 浏览

c++ - QThread 插槽行为

我是 C++ 和 Qt 的新手,我想知道如果我发出一个signalin object1running inthread1到另一个object2running in anotherthread2并且object2正在运行一个无限循环进行处理会发生什么?因为in忙于运行循环 ,所以永远不会调用slotin吗?object2thread2

0 投票
2 回答
278 浏览

c++ - 信号和槽的用途是什么

实际上,我在 Qt 中编程时一直在使用信号和插槽。信号和槽的主要用途是在 UI 交互中,例如,单击按钮会发送一个信号,该信号将调用槽来执行操作。我知道可以将信号和插槽用于非 gui 应用程序,例如服务器端应用程序。我寻找其他提供信号和插槽的库,并找到了boost库。这与我从 Qt 中学到的东西有些不同。然后我想知道信号和槽的真正用途是什么,因为我可以手动调用一个函数来在给定的时间执行一个动作。

例如在 boost 这里是信号/槽的一个例子:

我可以简单地通过一个简单的调用来做同样的事情,mySlot()不是吗?

并不是让我想到的是,当我们尝试连接两个不同的插槽时,它们的调用顺序与连接顺序相同。如果第一个插槽被阻塞(尝试添加一个无限循环),第二个插槽将永远不会被调用!我猜它是一种存储函数地址然后迭代循环并逐个调用的向量!

信号和插槽背后的魔力是什么?还是只是开发人员的一种抽象?

先感谢您。

0 投票
8 回答
8950 浏览

c++ - 在 Qt 中使用排队连接时如何压缩插槽调用?

在阅读了一些关于Qt Signal-Slot 通信的文章后,我仍然对排队连接有疑问。

如果我有一些线程一直在相互发送信号,假设一个线程thread_slow在它的事件循环中运行一个慢速方法,另一个thread_fast运行一个快速发送多个信号的方法,而另一个线程仍在运行它是慢速方法...... ..当slow方法从thread_slow返回到事件循环时,它会处理之前发送的所有信号thread_fast还是只处理最后一个(所有信号都是同一类型)?

如果它将处理所有信号,有没有办法让thread_slow 唯一的过程成为最后一个?(考虑到多线程应用程序中的“最后一个”可能是模糊的,为了简单起见,让我们考虑线程请求最后一个信号之前的最后一个信号,因此在线程寻找最后一个信号时发送的新信号可能会丢失)。

(我问这个是因为我有多个线程从多个线程接收数据,我不希望它们处理旧数据,只是发送的最后一个数据)

我已经运行了一些测试,看起来 Qt 将处理所有信号。我做了一个线程:

另一个插槽可以:

线程将运行:

我每 500 毫秒从一个线程向另一个线程发送一个信号,另一个线程休眠 3000 毫秒(3 秒),然后唤醒并将内部变量增加 100。每次执行插槽时,它都会发出一个文本收到的值 + 内部变量。我得到的结果是每次 QCoreApplication::processEvents();被调用,所有信号都被执行......(我编辑了这部分,因为我在之前的代码中发现了一个错误)

0 投票
1 回答
101 浏览

qt - QTableView 没有发出任何信号

出于某种原因,我的 QTableView 似乎从不发出单个信号。起初我尝试以编程方式连接到任何插槽,但后来我意识到,即使通过 GUI 中的信号/插槽编辑器,我也无法让事情发生,无论我选择哪个信号或插槽。

经过大量研究后我注意到的一个细节是 Qt 文档指定“仅在索引有效时发出信号。”,所以我知道这可能是我的模型的问题。

但是,我仍然不知道可能是什么问题,或者我该如何解决它。在我拥有的所有模型上显示单元格都可以正常工作,但它们似乎都没有提供正确的信号行为,所以我无法真正检测到有问题的代码来发布它。

可能需要注意的是,我尝试禁用编辑,并且我正在 Mac OS X Lion 10.7.5 上对此进行测试。

我很感激任何帮助。这是我在这里的第一个问题,尽管我长期以来一直受益于其他人提出的问题。所以,是的,我已经彻底寻找解决方案。

0 投票
1 回答
10391 浏览

c++ - QObject::connect 与连接方法之间的区别

我是Qt的新手。大多数时候 Qt 开发人员需要使用信号和槽进行对象通信。到目前为止,我已经看到了两种连接信号和插槽的方法。

他们两者之间的确切区别是什么?为什么我们必须在第一个方法中添加 QObject 前缀?

0 投票
1 回答
4197 浏览

c++ - QT NetworkAccessManager 未知错误

我正在尝试在 QT 中做一个非常简单的 REST 客户端,但是我的回复中出现“未知错误”。此外,当我进行数据包捕获时,我看到 0 个数据包被发送到服务器。

我的代码是:

我的结果是:未知错误。

简单的应用程序编译时没有错误或警告。

任何人都可以看到任何问题吗?

我的预期输出是“Hello BOB”,并且使用 Curl 使用 PHP 客户端成功测试。

0 投票
1 回答
610 浏览

c++ - 使用信号/插槽来避免循环依赖?

我有一段不优雅的 C++ Qt 代码,其中 main 创建了一个图形项(父级),它创建了一堆子图形项。孩子和父母必须互相调用方法,即父母需要告诉它的孩子做一些事情(移动,改变颜色等),孩子会向父母发出信号给它的其他孩子做事情。两者都调用彼此的方法会导致一些丑陋的循环代码,并且令人沮丧地躲避 C2027 错误。使用自定义信号/槽系统作为孩子和父母之间的沟通方法是否有意义?还是我应该坚持我目前的设计并尝试解决这些类型的错误?

例如,这段代码(我当前的设计)生成 C2027:

主窗口:

福:

酒吧:

0 投票
2 回答
9295 浏览

c++ - Q_ENUMS 在 QML 中“未定义”?

枚举不适合我。

  • 我已经注册了他们Q_ENUMS()
  • 我没有忘记Q_OBJECT
  • 该类型是使用注册的qmlRegisterType()
  • 该模块是在 QML 中导入的

简而言之,一切都是“按部就班”,但出于某种原因,我继续undefined为 QML 中的每个枚举获取信息。我错过了什么吗?

...

...

编辑:另请注意,已注册的枚举确实可用于元系统,由于某种原因,它们在 QML 中不起作用。

更新:我刚刚发现了这个错误:https ://bugreports.qt.io/browse/QTBUG-33248 但与那个错误不同的是,我的根组件是一个裸露的而不是作为其根UI的自定义元素。UI

事实证明,实际上可以在 QML 中使用枚举值console.log(),下面的代码实际上是有效的。

和...

输出是:

所以我想除了“你没有正确使用它”之外还有另一个问题......这可能与我上面提到的错误有关,以及当我实例化UI元素时,我实际上实例化了一个 QML 组件,它是以UI为根的对象树。虽然这对于使用来自 C++ 的指针和完整的 QML 对象并没有任何问题,但由于某种原因它似乎确实弄乱了枚举。

0 投票
1 回答
225 浏览

qt - 如何使用 QNetworkRequest 将 Qlabel 与 jpg 一起使用?

我正在使用 PyQt4 创建一个表单,该表单使用 Qlabel 在单独的窗口中显示基于 Web 的图像。应该是单击表单上的按钮通过从表单上的表格单元格中读取新图像 url 来使用新图像更新 Qlabel。

我认为我遇到的问题是不了解如何将 Qlabel 创建为类对象,然后我可以通过设置其 setPixmap() 属性对其进行更新。这是我到目前为止所写的:

代码将运行,但是当调用 ImageLabel 类时,将使用 url 中的初始文本创建 QLabel,但永远不会获取图像,并且会立即从视图中删除 Qlabel。

我将不胜感激有关如何使其正常工作的任何提示。