作者:小豆君的干货铺
链接:https://www.zhihu.com/question/27040542/answer/218384474
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在回答问题之前,你需要先知道Qt的精髓有哪些,而想要知道Qt的精髓,就应该先知道什么叫精髓。

首先,把精髓一词分开来看

  • 精:字面意思是人的精血,我们从小就听到人有精、气、神,而且一级比一级高,而精则是气和神的基础,所以是组成物质的基本条件。
  • 髓:字面意思就是骨髓,骨髓是人体核心的核心,即精中之精。

现在我们合起来再看,所谓精髓,是指构成物质的最基本条件+最核心部分。而物质之所以区别于其他物质,就是因为他们的精髓不同。

那么我们回到正题,Qt的精髓,也就是说区别于其它语言的部分是哪里。

精——构成Qt的最基本条件,你想想Qt中的哪个模块是其它模块中的基石,其实在Qt的模块开头中已经给出了答案,QtCore。

髓——那么根据这个髓的定义:精中之精。

想想QtCore中的精是什么,其实Qt的文档也已经给出了答案。

看到了吗,Qt真正的核心,元对象系统、属性系统、对象模型、对象树、信号槽。

至于其他的比如事件系统等,在其他框架中都有类似的应用。

那么如何学到这些精髓,我提供以下几个建议:

1. 无论你是学Qt,Java,Python或其它,都需要明白一个道理:摒弃掉你的好奇心,千万不要去追求第三方类或工具是怎么实现的,这往往会让你收效甚微,其实,你只需要熟练掌握它的接口,知道类的目的即可,不可犯面向过程的毛病,刨根问底。记住,你的目标是让其它工具为你服务,你要踩在巨人的肩膀上创造世界。

2. 往死里啃这五大特性,在你的项目中,逐渐的设法加入这些特性,多多练习使用它们,长此以往你会收获意想不到的效果。

3. 一边请教别人,一边多多重构,其实编码这条路虽然有人给你指路,但真正走下去的是你自己,当你真正走完时,你的编码水平一定会有非常大的提升。也许别人1000行的代码,在你这里几十行就搞定了,这也正事Qt的魅力。

4. 在阅读Qt的帮助文档时,要静下心来,不要放过每一句,记住在文档中没有废话,尤其是每段的开头。我来举个例子吧。下面是文档中介绍Qt信号的第一句话。

Signals are emitted by an object when its internal state has changed in some way that might be interesting to the object's client or owner.

我们翻译过来就是:

当对象的内部状态以某种方式发生变化时,该对象的客户或其所有者可能会对此变化感兴趣,从而发出信号。

简单的一句话,它告诉我们非常重要的编程方法,我们来抓几个关键词来分析

  • 内部变化:一个设计良好的类,如果你认为它的内部某个属性的变化会对外界有很大影响,那么你就可以在它改变的时候,发出信号。
  • 对象客户,所有者:这个告诉了你一般情况下,谁会去关心这样的变化,你可能会考虑为这些外部者定制槽函数。
  • 感兴趣:这个词翻译成代码就是connect,如果外部对变化感兴趣,就connect。

通过上面三个关键词,你会发现Qt通过信号槽实现的这个低耦合,高内聚是多么的令人叫绝。

大概的建议就先写这么多吧,希望有用。

顺带,如果有人想要学习Qt的可以关注我的专栏:跟小豆君学Qt

更多分享请关注我的公众号:小豆君,只要关注,便可加入小豆君为大家创建的C++\Qt交流群,方便讨论学习。

QtCore是Qt的精髓(包括五大模块:元对象系统,属性系统,对象模型,对象树,信号槽)的更多相关文章

  1. Qt元对象和属性系统详解

    Qt 是一个用标准 C++ 编写的跨平台开发类库,它对标准 C++ 进行了扩展,引入了元对象系统.信号与槽.属性等特性,使应用程序的开发变得更高效. 本节将介绍 Qt 的这些核心特点,对于理解和编写高 ...

  2. Qt 学习之路:深入 Qt5 信号槽新语法

    在前面的章节(信号槽和自定义信号槽)中,我们详细介绍了有关 Qt 5 的信号槽新语法.由于这次改动很大,许多以前看起来不是问题的问题接踵而来,因此,我们用单独的一章重新介绍一些 Qt 5 的信号槽新语 ...

  3. Qt 学习之路 2(16):深入 Qt5 信号槽新语法

    Qt 学习之路 2(16):深入 Qt5 信号槽新语法  豆子  2012年9月19日  Qt 学习之路 2  53条评论 在前面的章节(信号槽和自定义信号槽)中,我们详细介绍了有关 Qt 5 的信号 ...

  4. Qt 学习之路 2(5):自定义信号槽

    Home / Qt 学习之路 2 / Qt 学习之路 2(5):自定义信号槽 Qt 学习之路 2(5):自定义信号槽  豆子  2012年8月24日  Qt 学习之路 2  131条评论 上一节我们详 ...

  5. QT信号槽机制

    信号槽 信号槽是QT中用于对象间通信的一种机制,也是QT的核心机制.在GUI编程中,我们经常需要在改变一个组件的同时,通知另一个组件做出响应.例如: 一开始我们的Find按钮是未激活的,用户输入要查找 ...

  6. Qt开发之信号槽机制

    一.信号槽机制原理 1.如何声明信号槽 Qt头文件中一段的简化版: class Example: public QObject { Q_OBJECT signals: void customSigna ...

  7. 解析Qt元对象系统(五) Q_INVOKABLE与invokeMethod(automatic connection从Qt4.8开始的解释已经与之前不同,发送对象驻足于哪一个线程并不重要,起到决定作用的是接收者对象所驻足的线程以及发射信号(该信号与接受者连接)的线程是不是在同一个线程)good

    概述查看Qt源码可知,Q_INVOKABLE是个空宏,目的在于让moc识别. 使用Q_INVOKABLE来修饰成员函数,目的在于被修饰的成员函数能够被元对象系统所唤起. Q_INVOKABLE与QMe ...

  8. QT信号槽连接

    一:信号槽是什么? Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就 ...

  9. Qt之log数据展示模块简要实现

    Log模块主要用于实时测井数据的显示和测后曲线数据的预览和打印,为更好的展示对Qt中相关知识点的应用,特以Log模块为例对其进行简要实现. 内容导图: 一.功能需求 1.界面效果图 Log模块实现曲线 ...

随机推荐

  1. sine曲线向前运动

    using UnityEngine; using System.Collections; public class sineWork : MonoBehaviour { float verticalS ...

  2. 《利用Python 进行数据分析》 - 笔记(4)----json

    解决方案: 读写文本格式的数据: pandas 提供了一些用于将表格型数据读取为DataFrame对象的函数 pandas 中的解析函数 函数的选项可以划分为以下几个大类 索引:将一个或多个列当做返回 ...

  3. JSP基本用法(二)隐含对象

    一.摘要 在JSP容器中生成的Servlet类的_jspService()方法中,定义了几个对象,在编写JSP页面时我们可以使用这些隐含对象. PageContext pageContext = nu ...

  4. 关于PHP中的 serialize () 和 unserialize () 的使用(即关于PHP中的值与已存储的表示的相互转换)

    有时,我们会碰到这样的数据(字符串) 1 a:3:{i:0;s:44:"/Uploads/images/2017-07-21/5971a9a08ad57.png";i:1;s:44 ...

  5. sklearn 中的 Pipeline 机制 和FeatureUnion

    一.pipeline的用法 pipeline可以用于把多个estimators级联成一个estimator,这么 做的原因是考虑了数据处理过程中一系列前后相继的固定流程,比如feature selec ...

  6. Android设计和开发系列第二篇:Action Bar(Develop—Training)

    Adding the Action Bar GET STARTED DEPENDENCIES AND PREREQUISITES Android 2.1 or higher YOU SHOULD AL ...

  7. 【git】 linux 环境安装git

    1 安装git依赖包 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUti ...

  8. Delphi应用程序的调试(五)其他调试工具

    Delphi应用程序的调试(五)其他调试工具 Delphi7中提供了一些附加调试工具来帮助用户检查程序错误.从性能上讲,其中一些工具属于高级调试工具.尽管高级调试工具不像其他工具那样常用,但对于经验丰 ...

  9. Delphi应用程序的调试(三)监视变量

    监视变量(Watching Variables) 当程序停在一个断点处时,用户做些什么呢?通常用户在断点处停下来是要检查变量的值,某个变量的值是否与预料的取值相同?或者某个变量取什么值(事先并不知道这 ...

  10. 使用SQL Server 2005作业设置定时任务【转】

    1.开启SQL Server Agent服务 使用作业需要SQL Agent服务的支持,并且需要设置为自动启动,否则你的作业不会被执行. 以下步骤开启服务:开始-->>>运行--&g ...