QT检测鼠标移入窗口和移出窗口

部署运行你感兴趣的模型镜像
enterEvent 是鼠标移入

leaveEvent是移出

MainWindow.h
#ifndefMAINWINDOW_H

#define MAINWINDOW_H

#include "QMainWindow"
#include "QEvent"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

protected:
    void enterEvent(QEvent *);
    void leaveEvent(QEvent *);
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H



您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### 设置 `Qt::ToolTip` 导致窗口原来句柄容易改变的原因 - **系统窗口管理机制**:操作系统对不同类型的窗口有不同的管理策略。当窗口设置为 `Qt::ToolTip` 时,系统将其识别为悬浮提示窗口,这种窗口通常具有临时性轻量级的特点。为了优化系统资源的使用管理,操作系统可能会重新分配窗口句柄。例如,在多窗口、多任务的环境下,系统会根据窗口的优先级使用频率动态调整窗口资源,`Qt::ToolTip` 窗口更容易受到这种资源管理机制的影响。 - **窗口样式属性改变**:设置 `Qt::ToolTip` 会改变窗口的样式属性,如窗口的层级、透明度、显示方式等。这些改变可能会触发系统重新创建窗口句柄以适应新的样式属性。例如,`Qt::ToolTip` 通常具有较高的透明度悬浮显示的特性,系统可能需要重新分配句柄来实现这些效果。 - **事件处理机制**:`Qt::ToolTip` 的显示隐藏是基于鼠标事件等触发的,当这些事件发生时,窗口的状态会频繁改变。系统为了确保事件处理的准确性高效性,可能会重新分配窗口句柄。例如,当鼠标移入移出触发 `Qt::ToolTip` 显示隐藏时,系统可能会重新创建句柄来处理这些状态变化。 ### 解决办法 - **固定窗口样式属性**:在设置 `Qt::ToolTip` 时,尽量保持窗口的样式属性相对稳定,避免频繁更改。如果需要更改样式属性,可以在窗口创建时一次性设置好。例如: ```cpp #include <QWidget> #include <QtWidgets> class CustomToolTip : public QWidget { public: CustomToolTip(QWidget *parent = nullptr) : QWidget(parent) { setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); // 避免后续频繁更改属性 } }; ``` - **缓存窗口句柄**:在代码中缓存窗口句柄,当需要使用窗口句柄时,优先使用缓存的句柄,而不是重新获取。例如: ```cpp #include <QWidget> #include <QtWidgets> #include <windows.h> class CustomToolTip : public QWidget { public: CustomToolTip(QWidget *parent = nullptr) : QWidget(parent) { setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); // 缓存窗口句柄 windowHandle = (HWND)winId(); } void someFunction() { // 使用缓存的窗口句柄 ShowWindow(windowHandle, SW_SHOW); } private: HWND windowHandle; }; ``` - **优化事件处理**:减少不必要的事件触发,避免频繁显示隐藏 `Qt::ToolTip`。可以设置合理的触发条件延迟时间,减少窗口状态的频繁变化。例如: ```cpp #include <QWidget> #include <QtWidgets> #include <QTimer> class CustomToolTip : public QWidget { Q_OBJECT public: CustomToolTip(QWidget *parent = nullptr) : QWidget(parent) { setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); timer = new QTimer(this); timer->setSingleShot(true); connect(timer, &QTimer::timeout, this, &CustomToolTip::showToolTip); } void enterEvent(QEvent *event) { timer->start(500); // 设置延迟时间 QWidget::enterEvent(event); } void leaveEvent(QEvent *event) { timer->stop(); hide(); QWidget::leaveEvent(event); } private slots: void showToolTip() { show(); } private: QTimer *timer; }; #include "main.moc" ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值