问题标签 [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.
qt - QEventLoop 使用(信号和槽)
我有一个包含这些行的应用程序。
信号改变了 的值currentWindowIndex
,但是由于槽的原因它没有工作,它没有及时改变它的值。有人建议我使用QEventLoop
,但我不明白如何做到这一点。请给我一个例子。代码的另一部分:
我认为它可以提供帮助。
MyMdArea
is сclass 继承自QMdiArea
, WorkSpace
is a QWidget
, TabsList
is a QTabBar
。还有一个事实:我试图了解插槽的执行顺序并在代码中添加了一些行:
发出WindowAdded
信号后
发出addedWindowIndex
信号后
和
改变后currentWindowIndex
的价值
这就是我看到的“1 2 3”,它让我的大脑爆炸了。也许我不明白什么?
c++ - QThread 插槽行为
我是 C++ 和 Qt 的新手,我想知道如果我发出一个signal
in object1
running inthread1
到另一个object2
running in anotherthread2
并且object2
正在运行一个无限循环进行处理会发生什么?因为in忙于运行循环 ,所以永远不会调用slot
in吗?object2
thread2
c++ - 信号和槽的用途是什么
实际上,我在 Qt 中编程时一直在使用信号和插槽。信号和槽的主要用途是在 UI 交互中,例如,单击按钮会发送一个信号,该信号将调用槽来执行操作。我知道可以将信号和插槽用于非 gui 应用程序,例如服务器端应用程序。我寻找其他提供信号和插槽的库,并找到了boost库。这与我从 Qt 中学到的东西有些不同。然后我想知道信号和槽的真正用途是什么,因为我可以手动调用一个函数来在给定的时间执行一个动作。
例如在 boost 这里是信号/槽的一个例子:
我可以简单地通过一个简单的调用来做同样的事情,mySlot()
不是吗?
并不是让我想到的是,当我们尝试连接两个不同的插槽时,它们的调用顺序与连接顺序相同。如果第一个插槽被阻塞(尝试添加一个无限循环),第二个插槽将永远不会被调用!我猜它是一种存储函数地址然后迭代循环并逐个调用的向量!
信号和插槽背后的魔力是什么?还是只是开发人员的一种抽象?
先感谢您。
c++ - 在 Qt 中使用排队连接时如何压缩插槽调用?
在阅读了一些关于Qt Signal-Slot 通信的文章后,我仍然对排队连接有疑问。
如果我有一些线程一直在相互发送信号,假设一个线程thread_slow
在它的事件循环中运行一个慢速方法,另一个thread_fast
运行一个快速发送多个信号的方法,而另一个线程仍在运行它是慢速方法...... ..当slow方法从thread_slow
返回到事件循环时,它会处理之前发送的所有信号thread_fast
还是只处理最后一个(所有信号都是同一类型)?
如果它将处理所有信号,有没有办法让thread_slow
唯一的过程成为最后一个?(考虑到多线程应用程序中的“最后一个”可能是模糊的,为了简单起见,让我们考虑线程请求最后一个信号之前的最后一个信号,因此在线程寻找最后一个信号时发送的新信号可能会丢失)。
(我问这个是因为我有多个线程从多个线程接收数据,我不希望它们处理旧数据,只是发送的最后一个数据)
我已经运行了一些测试,看起来 Qt 将处理所有信号。我做了一个线程:
另一个插槽可以:
线程将运行:
我每 500 毫秒从一个线程向另一个线程发送一个信号,另一个线程休眠 3000 毫秒(3 秒),然后唤醒并将内部变量增加 100。每次执行插槽时,它都会发出一个文本收到的值 + 内部变量。我得到的结果是每次 QCoreApplication::processEvents();
被调用,所有信号都被执行......(我编辑了这部分,因为我在之前的代码中发现了一个错误)
qt - QTableView 没有发出任何信号
出于某种原因,我的 QTableView 似乎从不发出单个信号。起初我尝试以编程方式连接到任何插槽,但后来我意识到,即使通过 GUI 中的信号/插槽编辑器,我也无法让事情发生,无论我选择哪个信号或插槽。
经过大量研究后我注意到的一个细节是 Qt 文档指定“仅在索引有效时发出信号。”,所以我知道这可能是我的模型的问题。
但是,我仍然不知道可能是什么问题,或者我该如何解决它。在我拥有的所有模型上显示单元格都可以正常工作,但它们似乎都没有提供正确的信号行为,所以我无法真正检测到有问题的代码来发布它。
可能需要注意的是,我尝试禁用编辑,并且我正在 Mac OS X Lion 10.7.5 上对此进行测试。
我很感激任何帮助。这是我在这里的第一个问题,尽管我长期以来一直受益于其他人提出的问题。所以,是的,我已经彻底寻找解决方案。
c++ - QObject::connect 与连接方法之间的区别
我是Qt的新手。大多数时候 Qt 开发人员需要使用信号和槽进行对象通信。到目前为止,我已经看到了两种连接信号和插槽的方法。
他们两者之间的确切区别是什么?为什么我们必须在第一个方法中添加 QObject 前缀?
c++ - QT NetworkAccessManager 未知错误
我正在尝试在 QT 中做一个非常简单的 REST 客户端,但是我的回复中出现“未知错误”。此外,当我进行数据包捕获时,我看到 0 个数据包被发送到服务器。
我的代码是:
我的结果是:未知错误。
简单的应用程序编译时没有错误或警告。
任何人都可以看到任何问题吗?
我的预期输出是“Hello BOB”,并且使用 Curl 使用 PHP 客户端成功测试。
c++ - 使用信号/插槽来避免循环依赖?
我有一段不优雅的 C++ Qt 代码,其中 main 创建了一个图形项(父级),它创建了一堆子图形项。孩子和父母必须互相调用方法,即父母需要告诉它的孩子做一些事情(移动,改变颜色等),孩子会向父母发出信号给它的其他孩子做事情。两者都调用彼此的方法会导致一些丑陋的循环代码,并且令人沮丧地躲避 C2027 错误。使用自定义信号/槽系统作为孩子和父母之间的沟通方法是否有意义?还是我应该坚持我目前的设计并尝试解决这些类型的错误?
例如,这段代码(我当前的设计)生成 C2027:
主窗口:
福:
酒吧:
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 对象并没有任何问题,但由于某种原因它似乎确实弄乱了枚举。
qt - 如何使用 QNetworkRequest 将 Qlabel 与 jpg 一起使用?
我正在使用 PyQt4 创建一个表单,该表单使用 Qlabel 在单独的窗口中显示基于 Web 的图像。应该是单击表单上的按钮通过从表单上的表格单元格中读取新图像 url 来使用新图像更新 Qlabel。
我认为我遇到的问题是不了解如何将 Qlabel 创建为类对象,然后我可以通过设置其 setPixmap() 属性对其进行更新。这是我到目前为止所写的:
代码将运行,但是当调用 ImageLabel 类时,将使用 url 中的初始文本创建 QLabel,但永远不会获取图像,并且会立即从视图中删除 Qlabel。
我将不胜感激有关如何使其正常工作的任何提示。