• 入门QT5 D1 Widget的移动


    又重温了一遍C++之后来看QT教程了。QT之前也看过,不过都是很长时间之前了,一直也用到。

    反过来再一学,这是和学新的是一样一样的。

    首先创建新项目。

    1.点击NEW PROJECT

    2.Applition,之后根据需求爱好,选择QT Widgets Applition,选择choose

    3.设置项目名称,与保存地址。这里要注意保存地址不要使用带有中文路径的文件夹,那样会导致程序运行中断的。

    创建需求:需要练习的是一个Widgets,创建出一个Widget,去掉周围标框,鼠标点击可以移动。

    代码:
        //隐藏外框
    this->setWindowFlags(Qt::FramelessWindowHint);  //调用Widget的成员函数setWindowFlags,传入枚举创建的Qt::FramelessWindowHint

    这里需要说明的是,QT中的成员函数真是太多了,其实根本也看不过来,根据自己的需求去找,去记就可以了。可以查看QT的文档,以帮助。

    之后是移动Widget:

    1.分析:鼠标移动窗口,首先需要的是手表按下、移动、释放事件。用事件去中断当前进程。调用槽函数。

    事件函数也是需要一层一层的去找,找到抽象类,下的prodected属性下的:

        virtual void mouseMoveEvent(QMouseEvent *event);
        virtual void mousePressEvent(QMouseEvent *event);
        virtual void mouseReleaseEvent(QMouseEvent *event);
    重写虚函数。后面的计算其实也就不难了。鼠标事件需要引用头文件#include <QMouseEvent>
    QPoint 创建变量 需要引用头文件#include <QPoint>
    //鼠标移动事件
    void Widget::mouseMoveEvent(QMouseEvent *event)
    {
    QWidget::mouseMoveEvent(event);//在Widget下的鼠标移动事件
        QPoint y = event->globalPos(); //鼠标的全局位置,鼠标位置对与桌面左上角的位置
        QPoint x = y-this->z;
        //鼠标到窗口左上角的位置是固定的
        //鼠标到桌面做上角的位置是y ....//Y-z就可以算出可变量x了。
        this->move(x);
    }
    //鼠标按下事件
    void Widget::mousePressEvent(QMouseEvent *event)
    {
        QWidget::mousePressEvent(event);            //在Widget下的鼠标按下事件
        QPoint y = event->globalPos(); //鼠标的全局位置,鼠标位置对与桌面左上角的位置
        QPoint x = this->geometry().topLeft(); //窗口左上角对于桌面的位置
        this-> z = y-x;  //定值, 不变的
    
    
        qDebug()<<"这是按下的事件";
    }
    void Widget::mouseReleaseEvent(QMouseEvent *event)
    {
    QWidget::mouseReleaseEvent(event);//在Widget下的鼠标释放事件
         this->z =QPoint();        //这么写就是创建了个匿名对象。匿名对象创建之后就会自动析构的。
    }

    之后还有一些设计阴影框的函数,这个也不大常用,用到的话,再来写吧。

  • 相关阅读:
    node异步转同步(循环)
    三级省市区PCASClass.js插件
    微信公众号基础总结(待更新)
    ES6详解
    webpack配置
    高性能 CSS3 动画
    github上传口令
    纯css3 实现3D轮播图
    优美的js代码,拿去玩~
    关于列举属性用点还是用【】
  • 原文地址:https://www.cnblogs.com/qq376142178/p/12375122.html
Copyright © 2020-2023  润新知