一、效果展示

 二、代码实现

childWidget.h

#pragma once
#include <QtWidgets/QWidget>
#include <QStyleOption>
#include <QPainter>
#include <QEvent>
#include <QDebug>
#include <QToolTip>
#include <QHelpEvent>#pragma execution_character_set("utf-8")extern enum widgetType
{NORMAL_WIDGET,RED_WIDGET,SAR_WIDGET,NONE_WIDGET
};extern enum widgetType widgetTypeOfMouseClick;class childWidget :public QWidget
{Q_OBJECT
public:childWidget(QWidget*parent,QString name);void createSingleNormalWidget();void createNormalWidget();void createRedWidget();void createSARWidget();virtual bool eventFilter(QObject *obj, QEvent *event);virtual void mousePressEvent(QMouseEvent *event);public:QString widgetName;signals:void mouseEnterSingleNodemalWidget();void mouseLeaveSingleNodemalWidget();
};

childWidget.cpp

#include "childWidget.h"enum widgetType widgetTypeOfMouseClick;childWidget::childWidget(QWidget*parent, QString name):QWidget(parent),widgetName(name)
{}void childWidget::createSingleNormalWidget()
{//设置窗口类型setWindowFlags(Qt::SubWindow);//将子窗口移动到指定位置move(100, 100);//设置窗口大小resize(110, 80);// 设置背景图片setAutoFillBackground(true);    // 这句要加上, 否则可能显示不出背景图.QPalette palette = this->palette();//palette.setColor(QPalette::Window, Qt::red);  // 设置背景色//palette.setBrush(this->backgroundRole(), Qt::black);// 设置背景色palette.setBrush(QPalette::Window,QBrush(QPixmap("image/normal.png").scaled(    // 缩放背景图.this->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));    // 使用平滑的缩放方式this->setPalette(palette);//鼠标悬停事件this->setAttribute(Qt::WA_Hover, true);//开启悬停事件this->installEventFilter(this); //安装事件过滤器
}void childWidget::createNormalWidget()
{//设置窗口类型setWindowFlags(Qt::SubWindow);//将子窗口移动到指定位置move(0, 0);//设置窗口大小resize(110, 80);// 设置背景图片setAutoFillBackground(true);    // 这句要加上, 否则可能显示不出背景图.QPalette palette = this->palette();//palette.setColor(QPalette::Window, Qt::red);  // 设置背景色//palette.setBrush(this->backgroundRole(), Qt::black);// 设置背景色palette.setBrush(QPalette::Window,QBrush(QPixmap("image/normal.png").scaled(    // 缩放背景图.this->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));    // 使用平滑的缩放方式this->setPalette(palette);//鼠标悬停事件this->setAttribute(Qt::WA_Hover, true);//开启悬停事件this->installEventFilter(this);       //安装事件过滤器
}void childWidget::createRedWidget()
{//设置窗口类型setWindowFlags(Qt::SubWindow);//将子窗口移动到指定位置move(115, 0);//设置窗口大小resize(110, 80);// 设置背景图片setAutoFillBackground(true);    // 这句要加上, 否则可能显示不出背景图.QPalette palette = this->palette();//palette.setColor(QPalette::Window, Qt::red);  // 设置背景色//palette.setBrush(this->backgroundRole(), Qt::black);// 设置背景色palette.setBrush(QPalette::Window,QBrush(QPixmap("image/red2.png").scaled(    // 缩放背景图.this->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));    // 使用平滑的缩放方式this->setPalette(palette);//鼠标悬停事件this->setAttribute(Qt::WA_Hover, true);//开启悬停事件this->installEventFilter(this);       //安装事件过滤器
}void childWidget::createSARWidget()
{//设置窗口类型setWindowFlags(Qt::SubWindow);//将子窗口移动到指定位置move(230, 0);//设置窗口大小resize(110, 80);// 设置背景图片setAutoFillBackground(true);    // 这句要加上, 否则可能显示不出背景图.QPalette palette = this->palette();//palette.setColor(QPalette::Window, Qt::red);  // 设置背景色//palette.setBrush(this->backgroundRole(), Qt::black);// 设置背景色palette.setBrush(QPalette::Window,QBrush(QPixmap("image/SAR2.png").scaled(    // 缩放背景图.this->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));    // 使用平滑的缩放方式this->setPalette(palette);//鼠标悬停事件this->setAttribute(Qt::WA_Hover, true);//开启悬停事件this->installEventFilter(this);       //安装事件过滤器
}//事件过滤器
bool childWidget::eventFilter(QObject *obj, QEvent *event)
{if (obj == this){//如果鼠标进入悬停  还有其他可选项QEvent::HoverMove和QEvent::HoverLeaveif (event->type() == QEvent::HoverEnter){//光标位置QCursor *cursor;int x = cursor->pos().x();int y = cursor->pos().y();qDebug() << "x==" << x << "y==" << y;QToolTip::showText(QPoint(x, y), widgetName);if (widgetName == "可见光"){qDebug() << "在可见光窗体上";widgetTypeOfMouseClick = widgetType::NORMAL_WIDGET;}else if (widgetName == "红外"){widgetTypeOfMouseClick = widgetType::RED_WIDGET;}else if (widgetName == "SAR"){widgetTypeOfMouseClick = widgetType::SAR_WIDGET;}qDebug() << "鼠标进入单窗体";//触发鼠标进入单窗体emit mouseEnterSingleNodemalWidget();//this->hide();return true;}else if (event->type() == QEvent::HoverLeave){qDebug() << "鼠标离开单窗体";//触发鼠标离开单窗体//emit mouseLeaveSingleNodemalWidget();}}return QWidget::eventFilter(obj, event);
}void childWidget::mousePressEvent(QMouseEvent *event)
{//qDebug() << "按下左键";//如果鼠标左键按下if (event->button() == Qt::LeftButton){qDebug() << "按下左键";//如果点击可见光窗体if (widgetTypeOfMouseClick == widgetType::NORMAL_WIDGET){qDebug() << "点击可见光窗体";}//如果点击红外窗体else if (widgetTypeOfMouseClick == widgetType::RED_WIDGET){qDebug() << "点击红外窗体";}//如果点击SAR窗体else if (widgetTypeOfMouseClick == widgetType::SAR_WIDGET){qDebug() << "点击SAR窗体";}}
}

threeWidget.h

#pragma once
#include <QtWidgets/QWidget>
#include <QStyleOption>
#include <QPainter>
#include <QEvent>
#include <QDebug>
#include <QToolTip>
#include <QHelpEvent>
#include <QDesktopWidget>
#include "childWidget.h"#pragma execution_character_set("utf-8")class threeWidget :public QWidget
{Q_OBJECT
public:threeWidget(QWidget*parent);virtual void paintEvent(QPaintEvent *event);virtual bool eventFilter(QObject *obj, QEvent *event);
signals:void mouseLeaveThreeWidget();
};

threeWidget.cpp

#include "threeWidget.h"threeWidget::threeWidget(QWidget*parent):QWidget(parent)
{//设置背景窗口类型setWindowFlags(Qt::Widget);//将子窗口移动到指定位置move(100, 100);//设置窗口大小resize(340, 80);//设置窗体透明setAttribute(Qt::WA_TranslucentBackground, true);//鼠标悬停背景窗体事件this->setAttribute(Qt::WA_Hover, true);//开启悬停事件this->installEventFilter(this);        //安装事件过滤器//创建可见光子窗口childWidget* normalChild = new childWidget(this,"可见光");normalChild->createNormalWidget();normalChild->show();//创建红外子窗口childWidget* redChild = new childWidget(this,"红外");redChild->createRedWidget();redChild->show();//创建SAR子窗口childWidget* SARChild = new childWidget(this,"SAR");SARChild->createSARWidget();SARChild->show();
}void threeWidget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.fillRect(this->rect(), QColor(255, 0, 0, 0));  //QColor最后一个参数80代表背景的透明度
}//事件过滤器
bool threeWidget::eventFilter(QObject *obj, QEvent *event)
{if (obj == this){//如果鼠标进入悬停  还有其他可选项QEvent::HoverMove和QEvent::HoverLeaveif (event->type() == QEvent::HoverEnter){//光标位置QCursor *cursor;int x = cursor->pos().x();int y = cursor->pos().y();qDebug() << "x==" << x << "y==" << y;qDebug() << "鼠标进入组合窗体";//触发鼠标进入单窗体//emit mouseEnterSingleNodemalWidget();//this->hide();return true;}else if (event->type() == QEvent::HoverLeave){qDebug() << "鼠标离开组合窗体";//触发鼠标离开单窗体emit mouseLeaveThreeWidget();}}return QWidget::eventFilter(obj, event);
}

QT鼠标悬停和点击功能相关推荐

  1. Axure-蒙版遮罩,鼠标移入移出点击效果设置,登录注册页面

    第二章主要讲解蒙版遮罩,鼠标移入移出点击效果设置及登录注册页面 蒙版遮罩就是用和页面大小的并且设置为半透明灰色的矩形盖住原有的页面,与某一元件相关联系(在"交互"中添加" ...

  2. Qt鼠标点击不响应QMouseEvent事件的解决办法

    最近在写程序在和同事合完代码后发现一个问题,项目是使用qt开发一个程序,有一个功能是要实现地图的标记功能,我需要在一个label控件上显示地图,然后再选中标记按钮后点击地图,会在鼠标点击的位置放置一个 ...

  3. 鼠标点击出现下拉菜单html,Bootstrap导航条可点击和鼠标悬停显示下拉菜单

    使用Bootstrap导航条组件时,如果你的导航条带有下拉菜单,那么这个带下拉菜单的导航在点击时只会浮出下拉菜单,它本身的href属性会失效,也就是失去了超链接功能,这并不是我想要的,我希望导航条的链 ...

  4. python爬虫鼠标模拟悬停并点击

    #鼠标模拟悬停并点击 import timefrom selenium import webdriver from selenium.webdriver.firefox.options import ...

  5. 【Python学习之鼠标悬停点击事件】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.python中的鼠标悬停 二.使用步骤 1.引入库 2.以百度设置为例 前言 `提示:python自动化过程中的鼠 ...

  6. Python+Selenium - 练习:打开京东->QQ登录->修改个人信息(含鼠标悬停后选中二级菜单进行点击)

    举例题目:打开京东->QQ登录->修改个人信息 覆盖知识点:         1.id.name.link定位         2.xpath.css定位及相对路径定位         3 ...

  7. 魔兽助手1.2--新增鼠标自动点击功能(抢英雄必备)

    更新说明: v1.2 增加鼠标点击功能(可自定点击类型和点击间隔). 优化部分代码 v1.1 添加屏蔽power键和sleep键功能. v1.0.1 支持Scroll LOCK键控制助手开关. 支持最 ...

  8. UE4 鼠标点击功能(蓝图)

    启用鼠标:Enable Input 开启鼠标点击功能:Set Enable Click Event 显示鼠标:Set Show Mouse Cursor 开启Actor/Mesh的OnClick事件 ...

  9. 【Qt一骚操作】Qt 开发中触发鼠标悬停事件

    Qt 开发中触发鼠标悬停事件 (1)setAttribute( Qt::WA_Hover,true) //在构造函数中 ui->btnGetRadarPara->setAttribute( ...

最新文章

  1. 宏基因组-微生物组文章目录索引(1803)
  2. 证书格式pfx和cer的区别及转换
  3. openstack-neutron基本的网络类型
  4. java 枚举常量_java中的枚举类和常量类区别在哪儿?
  5. 学好SQL--MySQL简单使用(3)
  6. 004-React入门概述
  7. Druid 配置及内置监控,Web页面查看监控内容 【我改】
  8. 使用ajax的时候必须要加的几行代码
  9. java final一点
  10. 实验教学管理系统 c语言程序代写源码下载
  11. 乍暖还寒也不怕 浅谈物联网智能温度控制器
  12. C++包含头文件尖括号和双引号的区别
  13. 国内顶尖团队的开源地址
  14. 计算机专业能力提升计划,it个人能力提升计划书(共8篇).doc
  15. 小米11刷root记录
  16. opencv-python学习笔记-2对比度增强——研0基础学习
  17. LCD(GEC6818)
  18. 【BP靶场portswigger-服务端4】操作系统命令注入-5个实验(全)
  19. python实时监控文件目录_教你三种方法,用 Python实时监控文件
  20. java thread 匿名_Java 匿名内部类

热门文章

  1. 深入 AXI4总线 (四):RAM 读取实战
  2. Navicat导入xlsx文件提示无法打开文件
  3. 软件架构设计师:软件架构风格
  4. 软件测试论文参考文献
  5. ORACLE几个关于工作日数的函数(原创)
  6. 步进电机的计算机控制系统设计,基于计算机并口的步进电机控制系统设计
  7. 180余件河北武强年画珍品亮相新疆昌吉回族自治州博物馆
  8. jenkins+Warnings Next Generation Plugin构建代码自动化检测
  9. 使用 OpenWhisk 自建 Serverless 服务
  10. 圣诞树小程序,动态效果,八个小程序