Qt And MFC Mouse Over Tips
Qt鼠标提示分析说明
关于鼠标停留在控件上面,显示提示内容的方法. 对于Qt来说, Qt的某一个控件类, 如果属于GUI的, 那么这个控件类会有一个setToolTip(QString text)的方法. 顾名思义, 这个方法就是设置鼠标停留显示内容的.也可能一开始, 我就接触的Qt, 觉得这个方法很人性化. 感觉也是非常符合设计常理的.
MFC鼠标提示分析说明
可是,当我了解到MFC的时候, MFC框架却是提供了一个专门的CToolTipCtrl类, 来统一管理鼠标的提示.按照MFC的思想, 它把鼠标提示的任务, 规划在了单独的一个模块儿中. 用的时候,感觉还是灰常的别扭的.如果哪个控件想显示鼠标提示内容, 那么通过调用这个类的方法, 把自己的ID和想要显示的内容, 设置给这个类.
QT And MFC 对比分析
同一个功能需求, 同一个设计语言. 不同的框架, 会采用不同的设计理念, 不同的设计方法.
对于以上2个框架的设计差别. Qt把这个功能通过一个方法, 渗透进每一个GUI的类里面. 如果, 这个类的一个对象想实现这个功能, 那么直接通过对象调用这个方法,即可. 也就是说, 通过Qt, 实现这个功能, 不用考虑这个功能会不会破坏我的模块儿. 因为没有其他东西的加入. 都是属于控件类自己的东西. 添加修改不影响其他地方, 所以不必担心会不会破坏现有的应用程序的模块儿.至少在这一点上面, 我觉得是优势所在.即使Qt 自己也有一个QToolTip的类, 但是该类的功能是设计鼠标提示的样式的.一般鼠标提示都属于跟随系统的默认样式, 不会使用到这个类.
那么再来思考MFC, MFC是单独提供了一个CToolTipCtrl类来管理所有的鼠标提示.这是什么思想? 在我看来,这是一种系统思想.站在系统的角度, 鼠标提示, 这是一个模块儿, 我要使用一个模块儿, 来管理所有需要鼠标提示的部分. 在使用MFC的解决方法的时候, 我需要考虑, 这个CToolTipCtrl类的对象, 放在哪里? 如果其他模块也使用了这个类, 我是否需要把指针传递到这个模块儿. 如果,有多个这样对象, 也是可以的吗?总之, 使用MFC的时候, 它让我考虑了很多东西. 虽然说, 这个类不复杂, 但是, 我在只想实现某个功能的时候, Qt给我了一个对象的方法, 而MFC给我了一个类, 你说, 是了解自己的方法快一些, 还是了解一个类快一些?
代码实现
通过对比分析, 我是比较倾向于Qt的这种自我的设计思想. 这也体现了Qt的优雅和简洁.
Qt实现鼠标提示
直接通过对象调用setToolTip(QString text)的方法即可, 如果想美化样式, 可以查看QToolTip的类说明.如此的简洁优雅.
MFC显示鼠标提示
这个方法是网上他人的, 本人确实没有系统的学习MFC, 只是基础而已.上面的分析, 如果错误,还请留言指正.
CToolTipCtrl m_Mytip; ///< 对话框对应的类中添加对象
/** OnInitDialog 函数中 */
m_Mytip.Create(this);
m_Mytip.AddTool( GetDlgItem(IDC_BUTTON0), "tool tip text" );
m_Mytip.AddTool( GetDlgItem(IDC_BUTTON1), "tool tip text" );
m_Mytip.AddTool( GetDlgItem(IDC_BUTTON2), "tool tip text" );
m_Mytip.SetDelayTime(200); //设置延迟
m_Mytip.SetTipTextColor( RGB(0,0,255) ); //设置提示文本的颜色
m_Mytip.SetTipBkColor( RGB(255,255,255)); //设置提示框的背景颜色
m_Mytip.Activate(TRUE); //设置是否启用提示
/** 然后在类向导中添加PreTranslateMessage消息响应函数 */
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_MOUSEMOVE)
m_Mytip.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
(⊙o⊙)…, 我怎么感觉这么复杂...
总结
对于Qt来说, 我觉得Qt把常用的功能封装的十分的简洁. 如果要是想实现复杂的功能, 还是需要一番功夫的. 而MFC是吧简单的和复杂的统一在一起了. 就单纯这个鼠标提示来说. 两者的差距还是很大的.我个人还是倾向于Qt.
Qt And MFC Mouse Over Tips的更多相关文章
- Qt And MFC UI Layout
界面布局 起初,计算机的交互是通过输入的代码进行的, 慢慢的有了图形之后, 就开始了图形界面的交互. 目前来说还有语音交互, 视频交互等多媒体的交互. 不管哪一种交互, 最终在计算机的角度都是信号的输 ...
- 用QT 还是MFC ? (转)
我曾经使用过QT和MFC来开发过软件,我想和大家分享我使用他们时所体会的不同之处. 我并非一个职业作家,这篇文章可能看起来不如专业的杂志和网站上的那么条理清晰.但是,我在这里是用我自己的语言来表达我自 ...
- QT和MFC的差别
QT和MFC的差别 在使用MFC之前就已经使用Qt这个事实可能影响了我的客观性. (MFC效率较高,但大量的Windows API和消息机制使得其较难理解,不易用:QT封装较好,易用且跨平台,但效率较 ...
- 用QT 还是MFC
转自:用QT 还是MFC ? ----不要在跟自己无关的事情上浪费时间 - CSDN博客 http://blog.csdn.net/sergery/article/details/8038897 我 ...
- Qt VS MFC
最近用了一段时间Qt,觉得网上这篇文章讲述Qt与MFC之间的区别很到位,分享一下. ----------------------------------原文---------------------- ...
- MFC中控制Tips的显示 - lingyun1120
from: http://www.cnblogs.com/lingyun1120/archive/2011/11/09/2243279.html MFC中为ToolTips生成了一个类CToolTi ...
- 一些VS2013下使用QT和MFC的错误解决方案
http://blog.csdn.net/lovejiayang/article/details/51853191
- Contents Of My Blogs
C++ How To Use Goto? Preprocessing Directive std::array std::deque std::forward_list std::map std::m ...
- MFC和Qt优缺点
在网上看到的,拿来和大家一起讨论下. 我曾经使用过来开发过软件,我想和大家分享我使用他们时所体会的不同之处. 我并非一个职业作家,这篇文章可能看起来不如专业的杂志和网站上的那么条理清晰.但是,我在这里 ...
随机推荐
- spring spring data jpa save操作事务
整合spring spring data jpa的时候,在save方法上加了@Transactional注解.此时调用springdatajpa save方法并不会真的把数据提交给数据库,而是缓存起来 ...
- 数组排序(java)
代码如下: public class paixu{ public static void main(String []args){ int a[] = {78,23,56,34,12,45,67,89 ...
- ECF R9(632E) & DP
Description: 给你$n$个数可以任取$k$个(可重复取),输出所有可能的和. $n \leq 1000,a_i \leq 1000$ Solution: 好神的DP,我们排序后把每个数都减 ...
- C语言-占位符
%a 浮点数.十六进制数字和p-记数法(C99) %A 浮点数.十六进制数字和p-记法(C99) %c 一个字符 %d 有符号十进制整数 %e 浮点数.e-记数法 %E ...
- iOS中一些算法函数
rand() --- 随机数 求随机数 a-b arc4random()%(b-a+1)+a abs() labs() ---- 整数绝对值 fabs() fabsf() fabsl() ...
- 李洪强iOS经典面试题153- 补充
李洪强iOS经典面试题153- 补充 补充 有空就来解决几个问题,已经懒癌晚期没救了... UML 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模 ...
- lucene和es总结
一.首先介绍lucene涉及到的排序过程 1.1.如何自定义排序对象 你可以自定义collector对象: 亦可以自定义comparator对象: 可以自定义scoredoc对象,决定如何处理结果集合 ...
- 新版startssl 免费SSL证书申请 (实测 笔记 https http2 必要条件)
简单说明: 目前多个大型网站都实现全站HTTPS,而SSL证书是实现HTTPS的必要条件之一. StartSSL是StartCom公司旗下的.提供免费SSL证书服务并且被主流浏览器支持的免费SSL.包 ...
- if [ "$变量1"x = "$变量2"x ]中x的含义
问题:if [ "$变量1"x = "$变量2"x ]中x的含义是? 答:“x”字符可以为任意字符,用于防止变量为空时,某些版本的bash中会产生错误: 在一个 ...
- SQL Server2008附加数据库之后显示为只读时解决方法
啰嗦的话就不多说了,直入主题吧! 方案一: 碰到这中情况一般是使用的sa账户登录的,只要改为Windows身份验证,再附加数据库即可搞定. 方案二: 使用sa登录SQL Server2008附加数据库 ...