当前位置: 首页 > 科技观察

QT对象模型那些事

时间:2023-03-13 01:05:21 科技观察

QT对象模型那些事就是本文要介绍的内容。标准的C++对象模型提供了一个支持对象范式的高效操作环境。但其静态性质在某些问题领域的适应性不够。图形用户界面编程既需要运行时效率,又需要高适应性。Qt结合了C++的速度和对象模型的适应性,达到了图形用户界面编程的目的。Qt为C++增加了以下特性:非常强大,在对象中实现无缝通信的机制,称为信号和槽。可查询和可配置的对象属性。强大的事件和事件过滤。用于国际化的上下文相关的字符串翻译。成熟的内部驱动程序Clocks使QT能够在一个事件驱动的GUI程序中优雅地集成多个对象。非常结构化和可查询的对象树以非常自然的对象所有权方式组织。安全指针(QPointer)可以被对象引用,销毁后自动置0,不像通常的C++指针,此时会变成悬空指针。它可以在不同的库边界之间动态转换。这些特性中的大部分是基于QObject的继承,使用标准C++技术实现的。另外,如对象通信机制和动态属性系统,需要Qt的全元对象编译器(moc)提供的元对象系统。元对象系统是一种扩展,使C++语言更适合组件编程。尽管模板也可以用于C++扩展,元对象系统提供了标准C++模板无法实现的好处;请参阅:为什么Qt不为信号和槽使用模板?了解更多信息。QtObjects:IdentityorValue上面列出的QT对象模型所增加的特性要求我们把Qt对象看作是一个身份而不是一个值。值可以被复制或赋值;身份只能被克隆。克隆意味着创建一个新的身份而不是完全复制旧的对象。例如,双胞胎有不同的身份。它们可能看起来完全一样,但具有不同的名称、不同的位置,并且可能完全不同的社交网络,这意味着克隆身份比复制更快,或者分配是更复杂的操作。我们可以在QT对象模型中找到这个。对于QT对象:有一个唯一的QObject::objectName()名称。如果我们复制一个Qt对象,如何命名复制的对象?在对象系统中有一个位置。如果我们复制一个Qt对象,我们应该把复制的对象放在系统的什么地方呢?可以连接到其他Qt对象,向其他Qt对象发送信号或接收其他Qt对象发送的信号。如果我们复制一个Qt对象,我们如何处理复制对象的信号槽连接?可以在C++运行时添加未声明的新属性。如果我们可以复制一个Qt对象,是否需要继承这些动态添加的新属性呢?由于上述原因,Qt对象应该被视为身份,而不是值。身份被克隆,克隆身份不是被复制,而是比复制或分配更复杂的操作。因此,QObject及其所有子类(直接或间接)禁用了它们的复制构造函数和复制运算符符号内容介绍到此结束,希望本文对您有所帮助。更多相关内容,请参考小编推荐。