- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我对 qt 信号槽系统有问题。
首先,我创建了一个名为 System in Singleton 模式的类,因此我可以在需要的地方访问它的实例。系统有信号 SelectionChanged。
我有一个列表小部件,我正在将它的 itemSelectionChanged 信号连接到我的名为 onSelectionChanged 的自定义插槽。在 onSelectionChanged 插槽中,我发出系统的 SelectionChanged 信号。目前还没有问题。
在我的软件设计中,许多 GUI 小部件或自定义类可以使用对象的选择,并且系统的 SelectionChanged 信号可以由列表小部件以外的小部件发出。
所以我在列表小部件中创建了一个名为 OnSystemSelectionChanged 的插槽,然后将其连接到系统的 SelectionChanged 信号。 OnSystemSelectionChangedSlot 是这样的。
void MyListWidget::OnSystemSelectionChanged(QObject *sender)
{
if (sender == this) return;
// Then I want to get a list of selected objects and set them as selection of this widget like this:
this->SetSelection(System::Instance()->GetSelectedObjects());
}
但问题是当我开始设置列表小部件的选定项目时,它将发出 itemSelectionChanged 信号并且我的 onSelectionChanged 插槽将被调用。然后插槽将发出系统的 SelectionChanged 信号,然后 OnSystemSelectionChanged 也将被调用。它会通过 sender 参数停止,但没有立即设置列表小部件的选定项目的方法。
我怎样才能解决这个问题。
我希望我确实很好地解释了我的问题。提前致谢。
编辑:拼写和语法错误已更正。
最佳答案
在 Qt 中有几种方法可以处理这个问题。
将多个 View 与一个基础模型结合使用。这会自动处理对多个 View 控件的更改传播,您不需要做任何额外的事情。您可以使用 QDataWidgetMapper
将“普通旧”小部件链接到模型中的数据元素。我想说这应该是首选的做事方式。无论如何,拥有所有 UI 的基础模型是朝着良好软件设计方向迈出的一步。
在数据模型之间传播更改时,同时实现 DisplayRole
和 EditRole
。这些 View 名义上将使用其中一个角色(例如 EditRole
)修改模型,而您可以通过编程方式使用另一个角色(例如 DisplayRole
)修改模型>).您在自己的插槽中处理来自模型的 dataChanged
信号,正确处理角色,并在具有其他角色的其他模型上调用 setData
。这可以防止循环。
对于不是 QAbstractItemView
的控件,实现两个信号:一个在发生任何变化时发出,另一个仅在基于键盘/鼠标输入的变化时发出。这是QAbstractButton
暴露的接口(interface),例如:toggled(bool)
信号是前者,clicked()
是后者。然后,您仅连接到基于输入的信号。
您自己的代码必须将编程更改传播到所有互连的控件,因为从您的代码更改一个控件不会修改其他控件。这应该不是问题,因为设计良好的代码应该从其余代码中封装 UI 控件的实现细节。因此,您的对话框/窗口类将以一种与显示特定属性的控件数量无关的方式公开其属性。
使用标志抑制信号发射 ( Bartosz's answer )。
在更改期间断开信号/槽连接 (Bartosz's answer)。
使用QObject::blockSignals()
。
关于c++ - Qt Signal Slot Architecture 不需要的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20743380/
如果您设计分布式应用程序以实现轻松扩展,或者您只想使用 Amazon、Google 或 Microsoft 提供的任何新的“云计算”产品,那么您通常最终会使用一些典型的概念或组件: 分布式 blob
根据uncle Bob's Clean Architecture 、企业和应用程序业务规则(概念上由命令组成)位于外部接口(interface)层之下的层中。因此,无论何时调用接口(interface
我在网上找不到它的任何实现实际上为您提供了一种与框架无关且实用的实现方式。 我已经看到了几个解决它的低于标准的建议: 使存储库方法成为原子 使用例原子化 它们都不是理想的。 案例#1 :大多数用例依赖
我正在查看 Sparkle 项目的配置并注意到它们设置: 架构 = ppc i386 x86_64 有效架构 = i386 x86_64 来自苹果的有效架构描述: Space-separated li
只听本周的podcast并认为将您的一些经验组合在一起会很好,在这些经验中,您已经看到设计的“架构”方面比应有的支配更多东西。 Java 在这方面经常受到负面报道,而且随着 Java EE 的复杂性增
我正在阅读 Bob Martin (https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html) 的清洁架构
OSGi是模块化架构,JavaBeans是组件架构。有什么区别? 最佳答案 OSGi 和 Java Beans 之间的主要区别在于类加载器的工作方式。在标准 .jar 文件或 EJB 中,rt.jar
我对 Clean Architecture 中的 Gateway to Entity 依赖有疑问。我认为以下同心圆图形经常被介绍为整洁的架构。 在上图中,Gateway并没有直视Entity。但是,还
我试图理解 TOGAF 9 的核心概念。 无论我多长时间阅读 TOGAF 手册中的解释,我都无法理解 Enterprise Continuum 和 Architecture Repository 之间
如果 Kappa 架构直接对流进行分析,而不是将数据拆分为两个流,那么在像 Kafka 这样的消息系统中,数据存储在哪里?或者它可以在数据库中进行重新计算? 单独的批处理层是否比使用流处理引擎重新计算
它们的含义是什么,我可以将它们设置为不同的值吗? 最佳答案 架构是您想要构建的架构,有效的架构是您可以设想使用您的代码库构建的架构。 所以也许您只想为 armv7 构建二进制文件,但相同的源代码可以为
我现在正在尝试在 Xcode 4.0 中构建的项目遇到问题,希望有人可以为我解释一下。 我正在尝试使用 ZBar SDK 并遵循此处概述的指南中概述的说明: http://zbar.sourcefor
在基于 Apple Silicon 的机器上使用 Interface builder 时,我当前的项目会引发 IBDesignable 错误。 我尝试排除用于调试的 arm64 架构,以及我在互联网上
Xcode 项目中出现警告: crypto was rejected as an implicit dependency for 'libcrypto.a' because its architect
我正在 Xcode 5 中开始新项目。我想使用 iOS SDK 7 开发应用程序,但部署目标为 iOS 5.0。当我在 Xcode 中创建新项目并尝试将部署目标更改为 5.0 时,我收到了这条消息:
编辑 :这个问题可能是旧的,它与 xcode 3 有关。 我正在开发一个需要 voip 支持的 iPhone 应用程序,所以我添加了 pjsip 的 ARM 版本图书馆。但如果我使用 iPhone 模
我们最近将最低 iOS 支持设置为 4.0,并开始使用 LLVM 编译器对当前可用的应用程序进行新更新。 将“架构”和“有效架构”设置为仅 armv7 是否会排除 iPhone 3G 等 armv6
我想在我的 64 位机器上启用额外的架构(32 位)。我做了 dpkg --print-architecture 来了解已知的架构,即 amd64 。之后我做了 dpkg --print--forei
操作系统:OS X Yosemite 版本 10.10.1 XCode:未安装 应用程序加载器3.0 (620) PhoneGap:3.7.0 PhoneGap 构建:在线 (build.phoneg
我们已经构建了一个具有多个 native 绑定(bind)的 Xamarin 应用程序(iOS、Android)。该应用程序在设备和模拟器上运行良好,我们能够毫无问题地构建存档(显然)。 问题是当我们
我是一名优秀的程序员,十分优秀!