Qt的信号槽,一个老MFC的经验
最近在利用闲暇时间研究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的经验的更多相关文章
- VJGUI消息设计-兼谈MFC、QT和信号/槽机制
星期六下午4点,还在公司加班.终于写完了下周要交工的一个程序. 郁闷,今天这几个小时写了有上千行代码吧?虽然大部分都是Ctrl-C+Ctrl-V,但还是郁闷. 作为一个有10年经验的MFC程序员,郁闷 ...
- Qt学习记录--02 Qt的信号槽机制介绍(含Qt5与Qt4的差异对比)
一 闲谈: 熟悉Window下编程的小伙伴们,对其消息机制并不陌生, 话说:一切皆消息.它可以很方便实现不同窗体之间的通信,然而MFC库将很多底层的消息都屏蔽了,尽管使用户更加方便.简易地处理消息,但 ...
- C++11实现Qt的信号槽机制
概述 Qt的信号槽机制是Qt的核心机制,按钮点击的响应.线程间通信等都是通过信号槽来实现的,boost里也有信号槽,但和Qt提供的使用接口很不一样,本文主要是用C++11来实现一个简单的信号槽,该信号 ...
- 非Qt工程使用Qt的信号槽机制
非Qt工程,使用Qt的信号槽机制,蛋疼不?反正我现在就是要做这样一件蛋疼的事. 要使用Qt的信号槽机制,下面是从Qt Assist里面关于 signal & slots 的一句介绍: All ...
- Qt Connect 信号 槽
信号和槽机制是 QT 的核心机制 .信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方.信号和槽是 QT 自行定义的一种通信机制,它独立于标准 ...
- 在非UI线程中更改UI(Delphi使用隐藏窗口来处理,QT使用信号槽)
在Delphi里我记得是使用TThread.Synchronize(TThreadMethod),原理是利用了一个隐藏窗口来处理. 在QT Debug模式一下,碰到了同样的问题,显示错误: canno ...
- 使用 C++11 编写类似 QT 的信号槽——上篇
了解 QT 的应该知道,QT 有一个信号槽 Singla-Slot 这样的东西.信号槽是 QT 的核心机制,用来替代函数指针,将不相关的对象绑定在一起,实现对象间的通信. 考虑为 Simple2D 添 ...
- Qt自定义信号槽的使用浅析+实例
1. Qt中自定义信号槽的使用 Qt框架提供的信号槽在某些特定场景下是无法满足我们的项目需求的,因此我们还设计自己需要的的信号和槽,使用connect()对自定义的信号槽进行连接. 如果想要使用自定义 ...
- qt多线程信号槽传输方式
//简单介绍一下QT信号与槽的连接方式: //Qt::AutoConnection表示系统自动选择相应的连接方式,如果信号与槽在同一线程,就采用Qt::DirectConnection, //如 ...
随机推荐
- Linux2.6中的Slab层
还记得一个进程创建的时候是什么给它分配的“进程描述符”吗?没错,是slab分配器,那么,这个slab分配器是个什么东西呢? 分配和释放数据结构是所有内核中最普遍的操作之一.为了 ...
- iOS开发中,应用内直接跳转到Appstore
iOS开发中,应用内直接跳转到Appstore 1.进入appstore中指定的应用NSString *str = [NSString stringWithFormat: ...
- 国产编程语言R++ V1.5发布
R++ v1.5内核改动较大,下面是一些主要变化: 1.使用PJIT(Pseudocode Just-In-Time),编译速度大幅提高,但运行效率远远不如C++,不过R++将在下一版本支持RJIT( ...
- MySql事务无法回滚的原因
使用MySQL时.假设发现事务无法回滚,但Hibernate.Spring.JDBC等配置又没有明显问题时.不要苦恼,先看看MySQL创建的表有没有问题.即表的类型. InnoDB和MyISAM是在使 ...
- Database(Mysql)发版控制二
author:skate time:2014/08/18 Database(Mysql)发版控制 The Liquibase Tool related Database 一.Installation ...
- 通达OA 小飞鱼开发培训第四讲 工作流介绍(图文)
本次课程主要解说了OA工作流相关内容,有些涉及到工作流的程序开发假设对工作流不熟悉也是有非常大难度,因此在这里进行了内容补充. 1.工作流介绍
- 一个页面从输入URL到页面加载显示完成的详细过程
下面以访问baidu页面来做一个过程分析 输入 URL:http://www.baidu.com DNS 域名解析 计算机无法识别域名,计算机与计算机之间要想进行通信,必须通过ip地址用来定位该计算机 ...
- BZOJ 3612: [Heoi2014]平衡( dp )
枚举Fl, 就变成一个整数划分的问题了...f(i,j) = f(i-j,j-1)+f(i-j,j)-f(i-N-1,j-1)递推.f(i,j)表示数i由j个不同的数组成,且最大不超过N的方案数 -- ...
- 关于CDH5.2+ 添加hive自定义UDAF函数的方法
- cocos2dx定时器
cocos2dx三种定时器的使用以及停止schedule,scheduleUpdate,scheduleOnce 首先,什么是定时器呢?或许你有时候会想让某个函数不断的去执行,或许只是执行一次,获取你 ...