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优缺点
在网上看到的,拿来和大家一起讨论下. 我曾经使用过来开发过软件,我想和大家分享我使用他们时所体会的不同之处. 我并非一个职业作家,这篇文章可能看起来不如专业的杂志和网站上的那么条理清晰.但是,我在这里 ...
随机推荐
- PowerDesigner修改生成mysql视图
今天遇到了个问题,就是有PowerDesigner的设计图,能生成oracle的视图,不能生成mysql,在网上找到了解决方案, 非常感谢各位网友的分享,这个不是抄袭,主要是为了让更多的人知道这种解决 ...
- EditText获取和失去焦点,软键盘的关闭,和软键盘的显示和隐藏的监听
软键盘显示和隐藏的监听: 注: mReplayRelativeLayout是EditText的父布局 //监听软键盘是否显示或隐藏 mReplayRelativeLayout.getViewTreeO ...
- 自己用的jquery经常用的工具command
var Cmd = { Entity: { QueryString: {}, }, RootPath: function () { var pathName = window.location.pat ...
- drawPython
# drawSnake import turtle def drawSnake(rad,angle,len,neckrad): for i in range(len): turtle.circle(r ...
- bzoj3123: [Sdoi2013]森林
题面传送门 复出的第一道题.. md就遇到坑了.. 简单来说就是可持久化线段树+启发式合并啊.. 感觉启发式合并好神奇好想学 每一次建边就暴力合并,每一个节点维护从根到它的权值线段树 按照题面的话最省 ...
- charles4抓https请求的注意事项
最近升级charles4.0后发现抓不了https请求了,但很奇怪ssl证书一样,记得以前用3.0就可以,今天仔细研究了一下,发现4.0的ssl代理设置中有一段说明(可能3.0也有但没注意): 直接上 ...
- HTML5开发手机应用--viewport的作用
在用HTML5开发手机应用或手机网页时,<head>部分总会有如下一段代码,这段代码到底什么意思呢.在网上,大家会得到很多答案.我从网上搜集了部分介绍,整理一下,以留备用. <met ...
- 开源一个C#写的Android和IOS都能跑的 打击感强的RPG玩玩。
攒到 250楼再统一发一次代码,各位 给力啊 156楼之前的兄弟 都已经发送代码了!各位查收一下! 156楼之后的兄弟要晚上统一发送 200楼之前的兄弟都已经发送代码了! 各位查收一下!!!顺便 ...
- MySql怎样去掉某个字段最后的逗号或最后的字
update 表 set 字段=left(字段,char_length(字段)-1) where right(字段,1)=',';
- 树莓派pppoe
连接的网络是移动(铁通)的宽带,不同的宽带的dns需要修改. 1.首先安装pppoe包 apt-get install pppoe 2.然后,复制conf文件/etc/ppp/pppoe.conf: ...