信号和槽:Qt中最差劲的创造

不要被这个标题唬住了,实际上我是非常认可Qt的。在C++实现的开源产品中没有哪一个的API风格比得上Qt,拥有高度一致性,符合常识,符合直觉,几乎不用学就可以直接上手。或许是由于我们摆脱不了马太效应的控制,赞誉已经给到了Qt的缺陷。Qt的最大问题就是提供了uic和moc。界面设计器生成xml文件,需要uic编译它生成C++代码;组织界面的C++代码其实一点都不复杂,完全可以由界面设计器直接生成。可以给Qt找到需要uic的理由——实现了分工,可以并行,为设计器开发团队屏蔽了C++语法的复杂性。然而,uic相对于界面设计器来说,工作量几乎可以忽略不记,在管理实践上如此不平衡的分工没有任何意义,并行也就说不过去了。组织界面的C++代码完全掌控在Qt团队手里,完全可以用最简单的方式实现(uic生成的c++代码也确实非常简单),这样一来也没有什么“C++语法的复杂性”需要屏蔽了。如果uic对用户来说没有坏处,仅仅给Qt团队增加了工作量,也就无可非议了。但是,uic集成到第三方开发工具中时,导致设计器创建的界面,不能及时生成为C++代码,必须手动执行一下uic。 uic跟moc比起来,就是小巫见大巫了。提供moc的原因,很大一部分是因为信号和槽机制。每每听到有人带着无比崇敬的态度布道Qt的信号和槽机制,真希望他们能知道信号和槽到底为了什么而存在。还是先来看一段Qt的代码吧。 class QDataSourceWidget : public QTreeView{Q_OBJECTpublic:explicit QDataSourceWidget(QWidget *parent = 0);~QDataSourceWidget();signals:void LayerAdded(IMapPtr, ILayerPtr, ILayerProviderPtr);protected: virtual void LayerAddEvent(IMapPtr map,…

JavaFX——简单的日记系统

前言 在学习Swing后,听老师说使用Java写界面还可以使用JavaFX。课后,便去了解。JavaFX是甲骨文公司07年推出的期望应用于桌面开发领域的技术。在了解了这个技术几天后,便使用它完成Java课程的大作业一个日记系统。(因为前面有Swing的基础,所以入门JavaFX比较快)还需要说明,博主是使用SceneBuilder配合JavaFX做的日记系统。下面将介绍使用JavaFX完成日记系统的详细思路以及一些关键的步骤,完整工程代码会附在文末。 前期的入门准备 先介绍一下博主入门JavaFx的过程,希望可以对毫无基础的小伙伴有一个帮助。 博主先是花了两三天时间跟着B站上面一个Up主的视频入坑学习。现在网上认真讲JavaFX技术的资料不多,学的人也少,这个技术还有种局势有点不妙的感觉,于是这个Up主每次视频一开讲都说:“欢迎大家收看JavaFX没人看系列”,每次博主都会默默评论我在看我在看,这个Up主实在很有趣。但是有一点不好,博主觉得Up主的语速有点慢(可能是赶着做大作业比较心急吧),每次播放都是放2倍速,2倍速的语句听起来刚刚好。需要注意,一定要慢慢学不能急! B站JavaFX技术学习视频链接:https://space.bilibili.com/5096022/channel/detail?cid=16953 前面提到过博主是使用SceneBuilder对界面进行布局,因为时间着急所以就没有写代码布局,而是使用这个工具。在正式开始写日记系统之前,看了一个使用SceneBuilder搭配做联系簿小项目的教程。若是也准备使用SceneBuilder完成界面布局也可以拿这个项目练手。 使用SceneBuilder搭配做联系簿项目教程:https://code.makery.ch/zh-cn/library/javafx-tutorial/ 这个教程网站的站长是一个优秀的国外程序员,这个网站几乎全是关于JavaFX技术教程的网站,这个站长喜欢做教育所以网站上的教程都通俗易懂,很适合入门学习! 易百教程的JavaFX教程也不错,也有教使如何用SceneBuilder:https://www.yiibai.com/javafx/javafx-tutorial-for-beginners.html 日记系统的一个整体观感 登录视图 注册视图 忘记密码视图 主视图 写日记视图 查找日记视图 日记实现的思路…

java经典40+分析

    现在是3月份,也是每年开年企业公司招聘的高峰期,同时有许多的朋友也出来找工作。现在的招聘他们有时会给你出一套面试题或者智力测试题,也有的直接让你上机操作,写一段程序。算法的计算不乏出现,基于这个原因我自己搜集了一些算法上的题型。希望对于大家有所帮助。   为什么说找出规律很重要?看下边第1,2,3,10题,都是先找到规律,才找到了编码的思路。画张图,在本子上演算下,都有助于我们找到规律。碰到问题,先不忙去敲代码,画张图,或者演算下,找到了解题的思路—解题,看清楚题是重中之重,看懂了题,题也就解了。找到了规律,编码分分秒的事。切忌不要马马虎虎看下题,就去编码,先看题,找到思路后,再去编码。   —上边是练习完前10题的阶段性总结。   —即使找到了规律和答案,画出了图,转换为代码,也不是那么容易!!!例如第11题,重点是如何组合三层循环和条件判断!!!   —第17题的重点是逆向推理!!!正向去推理的话,会把你引入一个迷宫,永远找不到答案。   —20-23题讲的都是递归函数的应用。 41题也讲了循环转换为递归的应用。   —题37,约瑟夫问题,丢手帕问题等应用的解题。约瑟夫问题==丢手帕问题。   —题40,告诉我们,解题多么重要了!理解偏了,往下走的路都是错的。桃子是按个分的,不能按半个或者1/3这样去分。别多想,假如能按半个分,就能按1/3个分,或者按1/4分,那不乱了。还有就是110行的判断流程也非常重要,正确的判断流程带给我们正确的编码和结果,否则同样会把我们引入误区。不会编码或者无从下手的时候,可以先走几步判断流程。   —题41,进一步讲解了算法中的递推思想,找到递推公式,问题就迎刃而解了。   利用算法和数据结构解决问题的终极思路:http://www.cnblogs.com/feichengwulai/articles/4173248.html结合一起记忆。 【程序1】   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第4个月后(5月就可以生了)每个月又生一对兔子(即小兔子3月生,过一个月,5月就能生兔子了。),假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:   兔子的规律为数列1,1,2,3,5,8,13,21…. (这里最重要,如果这里分析不出来,程序也就无从下手了。这里的规律就是后边的数总是前边数的和。这里是按对算的,结果乘以2即可。不要按只算,只会增加复杂度。)   思路:其实这个问题我们可以将兔子划分为“1月大的兔子“,”2月大的兔子“,”3月大的兔子“。…