窗口靠边自动隐藏

用过qq的同学都知道,qq主窗口在靠近界面边缘时会自动隐藏,而当鼠标再一次进入的时候会自动弹出,接下来我将记录下自己实现的类似同样的功能,支持多屏幕靠边隐藏。文章末尾我提供了demo的下载地址,这个样例我是从网上下载下来,并自己进行了优化,主要针对边界判断和多屏幕支持。

下面是我做的效果展示,由于录屏软件录制屏幕顶端不好录制,所以录制了屏幕左侧,我自己测试的结果是:屏幕左、屏幕上和屏幕右都没有问题。如果发现问题的同学可以联系我。

效果预览

接下来我将每一步的实现代码分别做以解释:

一、窗口移动

做windows桌面程序的同学,应该都会这个功能,不过我还是贴一下代码吧,虽然不是特别复杂。要实现这个功能只需要重写3个方法,分别是:mousePressEvent、mouseMoveEvent和mouseReleaseEvent。

1、mousePressEvent

void FloatingWidget::mousePressEvent(QMouseEvent *e)
{
    if (e->button() == Qt::LeftButton)
    {
        m_dragPosition = e->globalPos() - frameGeometry().topLeft();
        e->accept();
    }
}

2、mouseMoveEvent

void FloatingWidget::mouseMoveEvent(QMouseEvent * event)
{
    if (event->buttons() & Qt::LeftButton)
    {
        QPoint pos = event->globalPos() - m_dragPosition;

        QDesktopWidget * desktop = qApp->desktop();
        QRect rect = desktop->screenGeometry(QCursor::pos());
        QRect frameRect = frameGeometry();
        if (rect.top() >= pos.y())//修正顶端位置
        {
            pos.setY(rect.top());
        }

        if (rect.left()>= pos.x())//修正左侧位置
        {
            int leftScreenNumber = desktop->screenNumber(pos - QPoint(width(), 0));
            if (desktop->screenGeometry(leftScreenNumber).contains((pos - QPoint(width(), 0))) == false)
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值