在日常生活中的使用的软件中,我们经常会遇到这样的情况。 
我们在网页上,有些网页链接的文字(比如文章标题,知乎问题标题,百度的词条等)因为太长了,而显示不出来,但是鼠标悬停在上面的时候就可以显示出来。 
我们在QQ上或者某些输入框内,我们不知道应该输入什么内容,但是鼠标如果悬停在输入框内的时候,会产生一个友好信息的hint。 
实现方法,就是我们今天的ToolTip设置。

代码如下: 
ItemWidget.h

#ifndef ITEMWIDGET_H
#define ITEMWIDGET_H #include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout> //class CLabel; class ItemWidget : public QWidget
{
Q_OBJECT
public:
explicit ItemWidget(QWidget *parent = 0);
void setText(QPixmap pixmap, QString name, QString info);
void setText(QString info);
signals: public slots:
private:
QLabel *labelIcon;
QLabel *labelName;
QLabel *labelInfo; QHBoxLayout *horLayout;
QVBoxLayout *verlayout;
protected:
bool event(QEvent *e);
}; #endif // ITEMWIDGET_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

ItemWidget.cpp

#include "itemwidget.h"
#include "global.h"
#include "ctooltip.h" #include <QEvent>
#include <QCursor> ItemWidget::ItemWidget(QWidget *parent) :
QWidget(parent)
{
labelIcon = new QLabel(this);
labelName = new QLabel(this);
labelName->setStyleSheet("QLabel{color: green; font: 13pt bold;}");
labelInfo = new QLabel(this);
labelInfo->setStyleSheet("QLabel{color: gray;}"); verlayout = new QVBoxLayout();
verlayout->setContentsMargins(0, 0, 0, 0);
verlayout->addWidget(labelName);
verlayout->addWidget(labelInfo); horLayout = new QHBoxLayout(this);
horLayout->setContentsMargins(2, 2, 2, 2);
horLayout->addWidget(labelIcon, 1, Qt::AlignTop);
horLayout->addLayout(verlayout, 4);
} void ItemWidget::setText(QPixmap pixmap, QString name, QString info) {
labelIcon->setPixmap(pixmap);
labelName->setText(name);
labelInfo->setText(info);
} // 测试用的
void ItemWidget::setText(QString info) {
labelIcon->setText(info);
} // 鼠标悬停的时候,显示当前用户简要信息
bool ItemWidget::event(QEvent *e) {
if (e->type() == QEvent::ToolTip) {
qDebug() << "tool tip show";
g_toolTip->showMessage(labelIcon->pixmap(),
labelName->text(),
labelInfo->text(),
QCursor::pos());
} else if (e->type() == QEvent::Leave) {
qDebug() << "tool tip leave";
g_toolTip->hide();
}
return QWidget::event(e);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

然后是CToolTip自定义样式部分: 
CToolTip.h

#ifndef CTOOLTIP_H
#define CTOOLTIP_H #include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QGroupBox>
#include <QVBoxLayout>
#include <QHBoxLayout> class CToolTip : public QWidget
{
Q_OBJECT
public:
explicit CToolTip(QWidget *parent = 0);
void showMessage(const QPixmap *pixmap, QString name, QString info, QPoint point);
void showMessage(const QPixmap *pixmap, QPoint point);
signals: public slots: private:
QLabel *labelIcon;
QLabel *labelName;
QLabel *labelInfo; QHBoxLayout *horLayout;
QVBoxLayout *verlayout; QGroupBox *groupBox; protected:
void hoverEvent(QHoverEvent *);
}; #endif // CTOOLTIP_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

CToolTip.cpp

#include "ctooltip.h"
#include <QDebug>
#include <QApplication>
#include <QDesktopWidget> CToolTip::CToolTip(QWidget *parent) :
QWidget(parent)
{
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);
this->resize(200, 100); ; this->setObjectName("CToolTip");
this->setStyleSheet("QWidget#CToolTip {border: 2px solid green; }"); groupBox = new QGroupBox(this);
groupBox->setGeometry(10, 10, 180, 80);
groupBox->setTitle("用户信息"); labelIcon = new QLabel(groupBox);
labelName = new QLabel(groupBox);
labelInfo = new QLabel(groupBox); verlayout = new QVBoxLayout();
verlayout->setContentsMargins(0, 0, 0, 0);
verlayout->addWidget(labelName);
verlayout->addWidget(labelInfo); horLayout = new QHBoxLayout(groupBox);
horLayout->setContentsMargins(10, 10, 10, 10);
horLayout->addWidget(labelIcon, 1, Qt::AlignTop);
horLayout->addLayout(verlayout, 4);
} // 显示ToolTip消息
void CToolTip::showMessage(const QPixmap *pixmap, QString name, QString info, QPoint point) {
labelIcon->setPixmap(*pixmap);
labelName->setText(name);
labelInfo->setText(info); // 重新定义CToolTip的坐标
int rectX;
int rectY;
if (point.rx() < 200) {
rectX = point.rx() + 10;
} else {
rectX = point.rx() - 240;
}
rectY = point.ry();
move(QPoint(rectX, rectY));
QWidget::show();
} // 显示ToolTip消息
void CToolTip::showMessage(const QPixmap *pixmap, QPoint point) {
labelIcon->setPixmap(*pixmap); labelName->setText("自己想办法获取");
labelInfo->setText("自己动手,丰衣足食");
// 此处可以作为QToolTip样式进行显示
move(point);
QWidget::show();
} // 当鼠标进入事件时,让界面隐藏掉
void CToolTip::hoverEvent(QHoverEvent *) {
hide();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

当然当然,在大多数的组件上面都有一个成员函数setToolTip(QSTring& ..) 
这个就可以实现简单的友好信息提示功能了。

http://blog.csdn.net/u013007900/article/details/50224873

Qt5制作鼠标悬停显示Hint的ToolTip的更多相关文章

  1. EasyUI Datagrid 鼠标悬停显示单元格内容 复制代码

    EasyUI Datagrid 鼠标悬停显示单元格内容 ,halign:, align: 0 « 上一篇:LINQ to Entities 中的查询» 下一篇:去掉字符串中的非数字字符 posted ...

  2. 鼠标悬停显示CSS3动画边框

    效果体验:http://keleyi.com/keleyi/phtml/css3/14.htm 以下是代码: <!DOCTYPE html> <html xmlns="ht ...

  3. Android Studio鼠标悬停显示注释

    Android Studio鼠标悬停显示注释 在AS中配置 如果你想从网上查看注释,到这一步就操作完成. 下面说明让软件使用本地注释: 使用本地注释 以Windows为例: 找到下面文件 C:\Use ...

  4. delphi treeview 鼠标移动显示hint信息

    procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState;   X, Y: Integer); var   Nod ...

  5. EasyUI的Datagrid鼠标悬停显示单元格内容

    功能描述:table鼠标悬停显示单元格内容 1.js函数 function hoveringShow(value) { return "<span title='" + va ...

  6. Bootstrap学习笔记(5)--实现Bootstrap导航条可点击和鼠标悬停显示下拉菜单

    实现Bootstrap导航条可点击和鼠标悬停显示下拉菜单 微笑的鱼 2014-01-03 Bootstrap 5,281 次围观 11条评论 使用Bootstrap导航条组件时,如果你的导航条带有下拉 ...

  7. jQuery实现鼠标悬停显示提示信息窗口的方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 可以兼容ie6的纯CSS三级鼠标悬停显示/隐藏菜单实现

    本来在chrome上用js写的好好的三级显隐菜单,放到ie6上一测试竟然奇葩般的会瞎闪.问题原因至今没参透,可能是我每次响应事件的处理代码过长??总之我是对ie6幻灭了,去网上搜一搜能支持ie6的下拉 ...

  9. jQuery鼠标悬停显示提示信息窗体

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. Swift中的UIKit重力学

    前言: 重力学这个名词不论在哪个行业领域听起来似乎都非常高大上. 那么在Swift中的重力学是什么呢?那就是将我们移动端屏幕上毫无生命力的东西也置于万有引力中.使它们能够展现出好像真的因为引力而向下坠 ...

  2. Forstner算子

  3. TCP状态转换机说明

    建立一个 TCP 连接TCP 是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.本节将详细讨论一个TCP 连接是如何建立的以及通信结束后是如何终止的. TCP使用三 ...

  4. android的快速开发框架集合

    出自:http://blog.csdn.net/shulianghan/article/details/18046021 1.Afinal  (快速开发框架) 简介:http://www.oschin ...

  5. [NOIP1999提高] CODEVS 1047 邮票面值设计(dfs+dp)

    dfs出邮票的各种面值,然后dp求解. ------------------------------------------------------------------------------- ...

  6. PHP新手必须掌握的入门与实战技巧

    作为当今主流的开发语言,PHP集简单.免费.高效等特点于一身.对于想加入PHP大军的新手来说,从何学起.如何学习? 你需要掌握PHP的基础知识.常用功能模块.面向对象.MVC等相关技能.学会了这些技能 ...

  7. 使得fiddler来抓包查看微信浏览器的网页源码

    需要工具:http://www.telerik.com/fiddler 下载安装后 第二步: 打开这个选项: 设置代理:allow remote computer to connect  端口为888 ...

  8. Python学习笔记 (3) :列表、元组的操作

    列表,即写在方括号之间.用逗号分隔开的数值列表.列表内的项目不必全是相同的类型. >>> a = ['spam', 'eggs', 100, 1234] >>> a ...

  9. Oracle笔记(十三) 视图、同义词、索引

    一.视图 在之前所学习过的所有的SQL语法之中,查询操作是最麻烦的,如果程序开发人员将大量的精力都浪费在查询的编写上,则肯定影响代码的工作进度,所以 一个好的数据库设计人员,除了根据业务的操作设计出数 ...

  10. Qt socket中怎么传结构体?

    直接发送和接收结构体,例如:struct A {...};struct A objectA; 发送的时候: tcpSocket->write((char *)&objectA, size ...