最近在利用闲暇时间研究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. 第七届河南省赛10402: C.机器人(扩展欧几里德)

    10402: C.机器人 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 53  Solved: 19 [Submit][Status][Web Boa ...

  2. SQL Server索引进阶:第二级,深入非聚集索引

    原文地址: Stairway to SQL Server Indexes: Level 2, Deeper into Nonclustered Indexes 本文是SQL Server索引进阶系列( ...

  3. 关于js封装框架类库之DOM操作模块(一)

    在前端开发的过程中,javascript极为重要的一个功能就是对DOM对象的操作,而对其封装就是为了更好地进行DOM操作,提高浏览器的支持效率 现在给出一个案例:页面创建三个div,然后给其添加样式 ...

  4. [原创] ASP.NET WEBAPI 接入微信公众平台 总结,Token验证失败解决办法

    首先,请允许我说一句:shit! 因为这个问题不难,但是网上有关 ASP.NET WEBAPI的资料太少.都是PHP等等的. 我也是在看了某位大神的博客后有启发,一点点研究出来的. 来看正题! 1.微 ...

  5. #pragma pack(push,1)与#pragma pack(pop)

    这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式. #pragma pack (n)             作用:C编译器将按照n个字节对 ...

  6. [Swust OJ 582]--放学了,抢机子了(SPFA)

    题目链接:http://acm.swust.edu.cn/problem/0582/ Time limit(ms): 5000 Memory limit(kb): 65535   Descriptio ...

  7. C++对象模型3--无重写的单继承

    C++对象模型中加入单继承 不管是单继承.多继承,还是虚继承,如果基于“简单对象模型”,每一个基类都可以被派生类中的一个slot指出,该slot内包含基类对象的地址.这个机制的主要缺点是,因为间接性而 ...

  8. C# 中带@字符串中的转义符号

    C#转义字符 c#里 @ 表示的是:1.在C#中,"c:\\temp"表示路径是c:\temp; 而@"c:\temp"就表示c:\temp; 所以,@的作用就 ...

  9. springmvc附件上传核心代码

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.Comm ...

  10. (Problem 41)Pandigital prime

    We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly o ...