• QT仿QQ页面


    最近心血来潮想做一个仿QQ的页面。

    页面的颜色和图标配置主要通过QSS实现,模仿的功能有:

    靠近屏幕上边缘自动隐藏和弹出功能。

    无边框设计和最小化

    用到的函数有:

    void leaveEvent(QEvent *); //检测鼠标离开窗口
    void enterEvent(QEvent *);//检测鼠标进入窗口

    思路:

    鼠标离开的时候,检测窗口上边缘Y坐标,小于1(相当于等于0)的时候,将窗口移出到屏幕外,在屏幕内保留1一个像素的高度;

    鼠标停靠的时候,检测窗口下边缘Y坐标,小于2(相当于等于1)的时候,说明处于隐藏状态,窗口根据设定速度移入屏幕内;

    主要代码如下:

    初始化部分

    MainWindow::MainWindow(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
    {
        ui.setupUi(this);
        this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint | Qt::WindowStaysOnTopHint);
        QMovie *movie = new QMovie(":/MainWindow/image/log.gif");
        ui.label_5->setMovie(movie);
        movie->start();
    }

    检测鼠标位置:

    void MainWindow::mousePressEvent(QMouseEvent * event)
    {
        this->setFocus();
        m_lastpos = frameGeometry().topLeft() - event->globalPos();
    }

    检测鼠标移动:

    void MainWindow::mouseMoveEvent(QMouseEvent * event)
    {
        if (this->hasFocus() == false)
        {
            return;
        }
        if (event->buttons() == Qt::LeftButton)
        {
            QPointF currentpos = event->globalPos();
            QPointF aa = currentpos + m_lastpos;//左上角新坐标 = 左上角旧坐标 + 鼠标新坐标 - 鼠标旧坐标
            if (aa.y() > 0)//禁止移出屏幕
                move(aa.toPoint());
            else
                move(aa.x(),0);
        }
    }

    检测鼠标离开

    void MainWindow::leaveEvent(QEvent * event)
    {
        if (this->pos().y() < 1)
        {
            setGeometry(pos().x(), -this->height() + 1 , this->width(), this->height());
        }    
    }

    检测鼠标移入

    void MainWindow::enterEvent(QEvent * event)
    {
        int n = 300;
        if(this->pos().y() + this->height() < 2 )
        {
            for(int i = 0; i < n; ++i)//控制移动速度
            { 
                int y = -this->height() + (float)this->height()/n * (i+1);
                setGeometry(pos().x(),y , this->width(), this->height());
            }
        }
    }

    效果

     

  • 相关阅读:
    itertools 迭代
    hmac 算法模块
    hashlib模块
    POJ1066线段交点
    POJ2653判断线段相交
    POJ1556 最短路 + 线段相交问题
    POJ1269求两个直线的关系平行,重合,相交
    计算几何小结1
    计算几何之叉积(外积)得应用
    差分约束系统——你能忍受得糖果数量
  • 原文地址:https://www.cnblogs.com/liuxianglei/p/9968206.html
Copyright © 2020-2023  润新知