为QMenu添加对QAction的tooltip的支持
来源:互联网 发布:编程单引号怎么打出来 编辑:程序博客网 时间:2024/05/19 21:40
QAction提供了setToolTip函数, 可以给action指定一个工具提示内容。 按照笔者的理解, 这样应该所有用到QAction的地方在鼠标停留时都应该显示出这个工具提示。 哪些地方会用到QAction呢, 简单罗列: QMenu, QToolBar, QMenuBar, 但实际上能直接支持QAction工具提示的也只有QToolBar而已。 看了看QMenu的实现, 发现这个类果然对工具提示没有做任何处理, 所以它最多能显示出QWidget支持的默认工具提示, 想让它显示QAction对应的提示就得自己想别的办法了。
要我说, 这个应该算是bug, 因为从文档来看是揣测不到这样的现实的。 不过这样的问题如果报告给官方, 最多也就被划入feature request范畴, 解决之日也必是遥遥无期, 还不如自力更生算了。
解决的方法是派生QMenu, 重写bool event(QEvent*)虚函数, 在其中处理QEvent::ToolTip事件。 这个事件在需要显示tooltip时发出, 所以我们响应该事件只需要在适当位置显示适当的工具提示内容即可。
如下代码:
bool Menu::event(QEvent* e)
{
switch(e->type())
{
case QEvent::ToolTip:
//show action tooltip instead of widget tooltip
{
QHelpEvent* he = dynamic_cast(e);
QAction* act = actionAt(he->pos());
if( act )
{
QToolTip::showText(he->globalPos(), act->toolTip(), this);
return true;
}
}
break;
}
QMenu::event(e);
}
三点注意事项:
- 获取鼠标位置的QAction用的是相对于Menu的坐标, 而显示ToolTip用的是全局坐标
- 显示tooltip之后要返回ture,表示当前ToolTip事件已经被处理。 不然底层继续处理该事件就会显示出QWidget设置的工具提示
- 函数最后要调用基类的event函数, 继续其他事件的处理
原文链接:http://www.cuteqt.com/blog/?p=1995
- 为QMenu添加对QAction的tooltip的支持
- 关于QT的菜单QMenu和QAction
- Qt学习笔记:QMenuBar()、QMenu()和QAction()的使用
- QMenu,QT的菜单添加
- 为Android添加对WML的支持
- QT之菜单栏QMenu,下拉菜单QAction,工具栏QToolBar的使用(二)
- 【转】QT之菜单栏QMenu,下拉菜单QAction,工具栏QToolBar的使用
- Qmenu和Qaction
- ToolTip的添加方法
- 为Android添加对WML的支持 (一)
- 为基于MFC的对话框添加ToolTip的简单方法
- MFC中,为自己派生的CStatic控件添加ToolTip
- 为ActiveX窗口上的自定义控件添加ToolTip
- qt中的菜单QMenu QAction
- qt中的菜单QMenu QAction
- 支持tooltip的CStatic控件
- QT,QAction中的ToolTip
- MSDN对ToolTip的介绍
- Java使用iText生成word文件的解决方案
- JPA中的多对多和联合主键映射
- 关于 解决MySQL数据库主从复制延迟的问题
- git使用说明
- 简单抓取页面
- 为QMenu添加对QAction的tooltip的支持
- Windows 7 下打开Access数据库出错
- 静态代码检测工具:PC-Lint(for c/c++)
- 纠结的NOKIA
- LAMP+logzilla2.9.9+syslog-ng实现集中日志管理(第二版)
- 第一次发博客文章
- “服务器推”技术的应用
- 百练3727摘花生
- iPad软件提交注意事项