作者:小豆君的干货铺
链接: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. 旺店通erp系统

    http://www.wangdian.cn/ api 文档:https://wenku.baidu.com/view/cd0d21ffbd64783e08122b80.html

  2. 利用DB实现简单去重处理

    业务需要针对某文件进行判重操作,用Perl实现如下 #!/usr/bin/perl my %h; s/\s+$// and $h{$_}++ while <>; print "$ ...

  3. Nginx 防盗链

    “盗链”的定义是:此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容. 常常是一些小网站来盗取一些有实力的大网站的地址(比如一些 ...

  4. EF的学习

    今天学习了ORM中的Entity FrearmeWork框架,其实之前看到orm框架,感觉好高大上啊,还没准备去了解它那,今天我们就学习了这个,其实Entity FrearmeWork框架和Nhibe ...

  5. rgba和opacity区别

    首先来看rgba: R:红色值.正整数 | 百分数G:绿色值.正整数 | 百分数B:蓝色值.正整数 | 百分数A:Alpha透明度.取值0~1之间. 再看opacity: 后面的取值为从 0.0 (完 ...

  6. 【转】java文件操作大全

    一.获得控制台用户输入的信息 public String getInputMessage() throws IOException...{         System.out.println(&qu ...

  7. javaWeb项目重命名的问题

    tomcat项目名称修改 步骤: 1.对工程重命名(选择工程,右键Refactor->Rename)      2.修改Web路径(选择工程,右键Properties->MyEclipse ...

  8. spring mvc 篇

    [1]spring mvc 实现多文件上传 http://blog.csdn.net/a1314517love/article/details/24183273 http://bbs.csdn.net ...

  9. 利用NtQuerySystemInformation函数遍历进程,遍历线程,获取线程挂起或运行状态

    版权声明:专注于计算机网络安全学习 https://blog.csdn.net/u011672712/article/details/51586030 1 2 3 4 5 6 7 8 9 10 11 ...

  10. No.2 PyQt学习

    新增加了状态栏.菜单栏和工具栏,界面如下: 代码如下: # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui, QtCore class ...