最近在利用闲暇时间研究Qt,大概有3周了,看过了官网的white paper并浏览了一遍<C++ GUI Programming with Qt 4, 2nd Edition>。总的来说,感触还是很深的,所以今天想写点东西,作为对Qt初体验的记录。

本人作为一个MFC老古董(如果你关注本博的话,你是知道的,汗~),发现研究Qt是一件非常令人赏心悦目的事情。那感觉,就像你逛完了集美家具城看到一堆国产风格的家具后突然走进宜家的卖场一样。我并不是说宜家的家具有多么好,只不过宜家家具代表的北欧风格和家具的设计思路和国产的比较起来是那么的不同,让人印象深刻。可能都是来自北欧的缘故吧,Qt的设计和宜家家具的设计都让我感到了那股北欧的简洁、质朴、某些地方又非常巧妙的风格。感谢北欧几个国家的人民,为我们带来了安徒生童话、Nokia手机、ABBA乐队……当然还有Qt。

喜欢Qt,当然还是从它的Signals & Slots开始。这个概念的提出是让人非常钦佩的。如果你写过10万行代码,仔细想一下,除了用于计算和处理事务的代码外,其它的代码都是在干什么的?没错,你写了X个响应Windows消息的函数,调用了Y次成员变量的方法,执行了Z个回调函数……你不过是在通过不同的方法与对象或某段代码沟通,让它们去执行某些代码而已。这个沟通的过程,有时候是非常麻烦的,甚至需要调整程序的构架和实现。在MFC中,当你不得不一次又一次继承、修改Message Map,并为代码的高耦合性和重复性头疼不已时,是否想到过别的解决方案呢?对于纯OO的编程来说,每个对象执行一些特定的操作,所有的对象通过沟通来共同执行所有的操作,完成整个软件的功能。在Qt里,Signals & Slots是Objects之间完美的沟通方式,它允许所有继承QObject的子类们随心所欲的沟通,即使在不同的线程中。知道每次当我想到这里的时候是什么心情吗?我要给Eirik鼓掌,大声地,长时间地鼓掌……

只有一个好的点子是不够的,当你研究Qt源代码时就会发现,为实现一个好的点子,通常要付出艰辛的努力。Let’s make things happen.不知各位听到这句话时一般有什么反应。Haavard和Eirik即使在没挣到1分钱而需要老婆养活的那几年也能把Qt这个事业坚持下来,并坚持了将近20年。这份执着更让人敬佩。有时候静下心来想一想,我们中国人好像是太聪明了,有时候缺乏那种执着和愚钝。当然,这跟国情也有关系,在中国,本土企业想做个世界级的ISV太难了,想盈利都很难(网游除外),更不用提开源软件了。那些优秀的程序员和软件从业者,难道中国真的没有适合你们大展拳脚的土壤吗?

言归正传,再说回Qt的特色。与MFC对比起来,你会发现Qt的设计是那么的直白。很多地方的解决方案是你第一次就想到的那一种。感觉在Qt中,没人会觉得你的想法简单。关键在于你能把问题解决。经过了10几年和无数个平台的洗礼,简单的事情就没那么简单了。Keep It Simple & Stupid (KISS),有的时候,我们想得太多了。

关于Signals & Slots我想再多说一句。在做木工活时,你知道一个好工具的重要性。它直接决定了你的工作是不是很辛苦,和能做出的东西是什么样的。Signals & Slots在Qt中就是那个先进的工具,有了它,很多事情就不一样了,整个Qt的构架也不一样了。可以看出,对于一个公司或一款软件来说,一个优秀的系统级程序员是一笔多么宝贵的财富。

今天先写到这里,我的下面几篇文章将围绕一个Qt程序展开,我会分几步写成一个类似Qt Demo的界面程序。在这个过程中,我会将Qt中的一些特色做个介绍,同时我会与MFC中的某些概念进行对比。有兴趣的TX,请关注本博。

http://blog.csdn.net/superjoel/article/details/4889729

Qt的信号槽,一个老MFC的经验的更多相关文章

  1. VJGUI消息设计-兼谈MFC、QT和信号/槽机制

    星期六下午4点,还在公司加班.终于写完了下周要交工的一个程序. 郁闷,今天这几个小时写了有上千行代码吧?虽然大部分都是Ctrl-C+Ctrl-V,但还是郁闷. 作为一个有10年经验的MFC程序员,郁闷 ...

  2. Qt学习记录--02 Qt的信号槽机制介绍(含Qt5与Qt4的差异对比)

    一 闲谈: 熟悉Window下编程的小伙伴们,对其消息机制并不陌生, 话说:一切皆消息.它可以很方便实现不同窗体之间的通信,然而MFC库将很多底层的消息都屏蔽了,尽管使用户更加方便.简易地处理消息,但 ...

  3. C++11实现Qt的信号槽机制

    概述 Qt的信号槽机制是Qt的核心机制,按钮点击的响应.线程间通信等都是通过信号槽来实现的,boost里也有信号槽,但和Qt提供的使用接口很不一样,本文主要是用C++11来实现一个简单的信号槽,该信号 ...

  4. 非Qt工程使用Qt的信号槽机制

    非Qt工程,使用Qt的信号槽机制,蛋疼不?反正我现在就是要做这样一件蛋疼的事. 要使用Qt的信号槽机制,下面是从Qt Assist里面关于 signal & slots 的一句介绍: All ...

  5. Qt Connect 信号 槽

    信号和槽机制是 QT 的核心机制 .信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方.信号和槽是 QT 自行定义的一种通信机制,它独立于标准 ...

  6. 在非UI线程中更改UI(Delphi使用隐藏窗口来处理,QT使用信号槽)

    在Delphi里我记得是使用TThread.Synchronize(TThreadMethod),原理是利用了一个隐藏窗口来处理. 在QT Debug模式一下,碰到了同样的问题,显示错误: canno ...

  7. 使用 C++11 编写类似 QT 的信号槽——上篇

    了解 QT 的应该知道,QT 有一个信号槽 Singla-Slot 这样的东西.信号槽是 QT 的核心机制,用来替代函数指针,将不相关的对象绑定在一起,实现对象间的通信. 考虑为 Simple2D 添 ...

  8. Qt自定义信号槽的使用浅析+实例

    1. Qt中自定义信号槽的使用 Qt框架提供的信号槽在某些特定场景下是无法满足我们的项目需求的,因此我们还设计自己需要的的信号和槽,使用connect()对自定义的信号槽进行连接. 如果想要使用自定义 ...

  9. qt多线程信号槽传输方式

    //简单介绍一下QT信号与槽的连接方式:    //Qt::AutoConnection表示系统自动选择相应的连接方式,如果信号与槽在同一线程,就采用Qt::DirectConnection, //如 ...

随机推荐

  1. C模块回调Lua函数的两种方法

    作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di C模块回调Lua函数的两种方法 lua和C通过虚拟栈这种交互方式简单而又可靠,缺点就是C做栈平 ...

  2. Delphi Excel FastReport

    unit Unit1; interface uses Printers,Windows, Messages, SysUtils, Variants, Classes, Graphics, Contro ...

  3. angularJS使用$watch监控数据模型的变化

    使用$watch监控数据模型的变化 在scope 内置的全部函数中,用得最多的可能就是$watch 函数了.当你的数据模型中某一部分发生变化时,$watch 函数能够向你发出通知.你能够监控单个对象的 ...

  4. Android Develop【转】

    [Android Develop]   Android实现伸缩弹力分布菜单效果 摘要: 本文介绍下在Android中实现伸缩弹力分布菜单效果.关于这种菜单效果在IPhone中比较常见,效果比较酷.那么 ...

  5. JS中的replace方法

    JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replace(/\-/ ...

  6. 深入理解C/C++数组和指针

    C语言中数组和指针是一种很特别的关系,首先本质上肯定是不同的,本文从各个角度论述数组和指针. 一.数组与指针的关系数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值.数组可以在某 ...

  7. IWebBrowser隐藏滚动条

    刚才在项目里看到一个IWebBrowser2,竟然需要通过MoveWindow的方式把滚动条遮挡,如果要缩小IWebBrowser2控件的显示大小呢?这种方法至少我用不习惯,起码也得从源头解决这样的问 ...

  8. 网络编程——TCP连接

    TCP在双方传输数据前,发送方先请求建立连接,接收方同意建立连接后才能传输数据.(打电话:先拨号,等对方同意接听后,才能交流)...高可靠性 UDP不需要建立连接(发短信).不可靠,可能出现数据丢失等 ...

  9. Android Developers:按需求加载视图

    有时候你的布局可能需要较少使用的复杂视图.无论它们是项目详情,进度指示器,或者处理的信息,你能通过在它们被需要的时候加载的方式,来减少内存消耗和加快显示. 定义一个ViewStub ————————— ...

  10. 自定义jquery表格插件

    以前一直都是再用easyui插件来实现各种功能,但是easyui太过于庞大,使用越多对服务器负载影响越大. 基于此,在模仿easyui的dataGrid表格插件的同时,自己去封装了一个.实现了基本的j ...