Qt之窗口靠边隐藏

Qt之窗口靠边隐藏

Qt事件介绍

事件(event)是有系统或者Qt本身在不同的时刻发出的,当用户按下鼠标,敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件是在对用户操作做出响应的时候发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。

Qt常见事件

键盘事件(QKeyEvent ):按键按下和松开.
鼠标事件(MouseEvent): 鼠标移动,鼠标按键的按下和松开.
拖放事件(QDropEvent): 用鼠标进行拖放.
滚轮事件(QWheelEvent): 鼠标滚轮滚动.
绘屏事件(QPaintEvent): 重绘屏幕的某些部分.
定时事件(QTimerEvent): 定时器到时.
焦点事件(QFocusEvent): 键盘焦点移动.
进入和离开事件(enterEvent(), leaveEvent): 鼠标移入widget之内,或是移出.
移动事件(QMoveEvent): widget的位置改变.
大小改变事件(QResizeEvent): widget的大小改变.
显示和隐藏事件(QShowEvent, QHideEvent): widget显示和隐藏.

窗口靠边所需应用事件

  1. 靠猜测相信大家应该也能猜出需要应用QT哪些事件来实现我们需要的效果

    1. void leaveEvent(QEvent *event);
    2. void enterEvent(QEvent *event);
    3. void mouseReleaseEvent(QMouseEvent*event);
    4. void mouseMoveEvent(QMouseEvent*event);
    5. void mousePressEvent(QMouseEvent*event);

    以上QT里的5种事件就是今天我们需要应用的,是不是感觉有些复杂呢?没关系等我来给大家理一理,你就会恍然大悟,其实也没那么难。It‘s So Easy!我先给大家上两张效果图,让大家更想也能这样实现一把。

窗口靠边效果图

左窗口靠边隐藏 右窗口靠边隐藏

码农之路

看了上面的效果图之后,亲们~是不是也想感觉看见我的代码也去实现一番吶?好的,我们这就开启代码之路………..

//我们先来看看窗口的进入事件(enterEvent)
void EdgeToHide::enterEvent(QEvent *event)
{
    switch (m_eEdgeStatus)
    {
    case EG_TOP:
        setGeometry(pos().x(), -SHOW_EDGE_WIDTH, width(), height());
        break;
    case EG_LEFT:
        setGeometry(-SHOW_EDGE_WIDTH, y(), width(), height());
        break;
    case EG_RIGHT:
        setGeometry(QApplication::desktop()->width() - width() + SHOW_EDGE_WIDTH, y(), width(), height());
        break;
    }
    return QWidget::enterEvent(event);
}
//窗口的离开事件(leaveEvent)
void EdgeToHide::leaveEvent(QEvent *event)
{
    switch (m_eEdgeStatus)
    {
    case EG_TOP:
        setGeometry(pos().x(), -height() + SHOW_EDGE_WIDTH, width(), height());
        break;
    case EG_LEFT:
        setGeometry(-width() + SHOW_EDGE_WIDTH, pos().y(), width(), height());
        break;
    case EG_RIGHT:
        setGeometry(QApplication::desktop()->width() - SHOW_EDGE_WIDTH, pos().y(), width(), height());
        break;
    }
    return QWidget::leaveEvent(event);
}
//鼠标释放弹起事件(mouseReleaseEvent)
void EdgeToHide::mouseReleaseEvent(QMouseEvent*event)
{
    if (y() <= 0)
    {
        m_eEdgeStatus = EG_TOP;
    }
    else if (QApplication::desktop()->width() <= (this->x() + width()))
    {
        m_eEdgeStatus = EG_RIGHT;
    }
    else if (this->x() <= 0)
    {
        m_eEdgeStatus = EG_LEFT;
    }
    else
    {
        m_eEdgeStatus = EG_NORMAL;
    }
    QWidget::mouseReleaseEvent(event);
}

我们理一理哈,其实很简单,我首先需要移动窗口到边缘上,释放鼠标记录当前状态,看窗口在左边缘,右边缘,上边缘,还是正常的显示位置。OK,这是第一步。
第二步,检测到上一步状态后,我鼠标离开了界面窗口,然后进入离开事件机制中。检测状态,是否需要隐藏。
第三步,鼠标进来啦~~~快快现形吧!
是不是很简单啦,我们边缘隐藏效果就完成啦~眼光利索的朋友可能发现了,代码中不是还有两个事件没用上,是的。在这里因为我的窗口是不支持拖动的啦~所以需要另外的两个
mouseMoveEvent(QMouseEvent*event);
mousePressEvent(QMouseEvent*event);
这两个事件来支持我的窗口移动。至于怎么移动窗口嘛,等下会揭晓了哦O(∩_∩)O。

结尾

只为记录,只为分享! 愿所写能对你有所帮助。Good Good Study, Day Day Up!

  • 12
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨田哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值