Qt QToolTip详解
2016-08-09 20:12
197 查看
Qt4中的tooltip与win32中的tooltip有很多不一样的地方,下面来总结一下。
一是不能直在堆或栈中生成QToolTip对象。因为其构造函数为私有。
二是从widget获取的tooltip不是tooltip对象,而是tooltip中的文本。
三是tooltip跟本不是一个widget。所以不把它当作widget用。
四是tooltip类是一个静态类,所以跟本不必生成tooltip对象就可以使用。
五是tooltip类不能被定制,所以不能从它产生各种形状的tooltip窗口。
QtoolTip有两种使用方式:
一是静态tooltip。比如为一个widget设置一个不变的tooltip文本,当鼠标移上去时显示tooltip。此时很简单,只需调用widget的setToolTip()设置文本即可。
二是动态tooltip。也就是一个widget上的tooltip是变化的。此时需要重写QWidget::event()函数,在里面判断事件类型,如果是QEvent::ToolTip,则控制显示的文本的内容,即可实现动态tooltip。
看如下代码示例:
[cpp] view
plain copy
bool SortingBox::event(QEvent *event)
{
if (event->type() == QEvent::ToolTip) {
QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
int index = itemAt(helpEvent->pos());
if (index != -1) {
QToolTip::showText(helpEvent->globalPos(), shapeItems[index].toolTip());
} else {
QToolTip::hideText();
event->ignore();
}
return true;
}
return QWidget::event(event);
}
可以看到,是调用 QtoolTip::showText()在某个位置显示tooltip文本。
那么,如果想随时显示tooltip,该怎么做呢?其实十分简单:直接调用QToolTip::showText(),指定要显示的位置就行了。因为tooltip类的函数跟本就相当于全局函数而已。
呵呵,其实很简单,但从win32转过来的人,觉得真别扭。
一是不能直在堆或栈中生成QToolTip对象。因为其构造函数为私有。
二是从widget获取的tooltip不是tooltip对象,而是tooltip中的文本。
三是tooltip跟本不是一个widget。所以不把它当作widget用。
四是tooltip类是一个静态类,所以跟本不必生成tooltip对象就可以使用。
五是tooltip类不能被定制,所以不能从它产生各种形状的tooltip窗口。
QtoolTip有两种使用方式:
一是静态tooltip。比如为一个widget设置一个不变的tooltip文本,当鼠标移上去时显示tooltip。此时很简单,只需调用widget的setToolTip()设置文本即可。
二是动态tooltip。也就是一个widget上的tooltip是变化的。此时需要重写QWidget::event()函数,在里面判断事件类型,如果是QEvent::ToolTip,则控制显示的文本的内容,即可实现动态tooltip。
看如下代码示例:
[cpp] view
plain copy
bool SortingBox::event(QEvent *event)
{
if (event->type() == QEvent::ToolTip) {
QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
int index = itemAt(helpEvent->pos());
if (index != -1) {
QToolTip::showText(helpEvent->globalPos(), shapeItems[index].toolTip());
} else {
QToolTip::hideText();
event->ignore();
}
return true;
}
return QWidget::event(event);
}
可以看到,是调用 QtoolTip::showText()在某个位置显示tooltip文本。
那么,如果想随时显示tooltip,该怎么做呢?其实十分简单:直接调用QToolTip::showText(),指定要显示的位置就行了。因为tooltip类的函数跟本就相当于全局函数而已。
呵呵,其实很简单,但从win32转过来的人,觉得真别扭。
相关文章推荐
- QT5.7 VS2013 Echarts
- Qt使用第三方类打开串口号10以上的失败问题解决方法
- QT installEventFilter 快捷键的设计
- qt写DLL文件并调用和出现的问题分析
- Qt之自定义控件(开关按钮)
- Qt之自定义控件(开关按钮)
- Qt之自定义控件(开关按钮)
- error LNK2026: module unsafe for SAFESEH image. E:\myproject\hellocpp\ffmpeg_qt\avformat.li
- Qt学习之路_9(Qt中Item Widget初步探索)
- Qt学习之路(17): Qt标准对话框之QMessageBox
- QT全局宏变量的实现
- 关于QT UDP组播的两个问题
- 在qt中使用libcef
- Apollo的简单配置使用(windows环境)
- 大量的QT控件及示例发放
- QT的信号与槽机制介绍
- QTimer类参考
- Bootstrap轮播(carousel)插件中图片变形的终极解决方案——使用jqthumb.js
- QT modbus类简介及串口modbus例程源码分析
- Qt中单例程序的实现