ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt——自定义标题栏——重写标题栏和鼠标事件,移动窗口

2022-07-29 20:33:52  阅读:127  来源: 互联网

标签:Qt 自定义 void 标题栏 QMouseEvent QPoint event 鼠标


头文件加入这两句:

#include <QPoint>  //坐标点
#include <QMouseEvent> //鼠标事件

public:
    // 移动窗口的变量;
    bool m_isPressed; //鼠标按下标志
    QPoint m_startMovePos;  //开始移动的坐标点
protected:

    void mouseMoveEvent(QMouseEvent* event);
    void mousePressEvent(QMouseEvent* event);
    void mouseReleaseEvent(QMouseEvent* event);

 

源文件实现:

DefinedTitleBar::DefinedTitleBar(QWidget* parent)
    : QWidget(parent)
    , m_isPressed(false)  //初始化鼠标按下标志为 false

{

}

 void DefinedTitleBar::mouseMoveEvent(QMouseEvent* event)   //鼠标移动事件
 {
     if (m_isPressed) //判断鼠标是否按下
     {
         QPoint movePoint = event->globalPos() - m_startMovePos;  //鼠标按下的坐标
         QPoint widgetPos = this->pos();
         m_startMovePos = event->globalPos();
        this->move(widgetPos.x() + movePoint.x(), widgetPos.y() + movePoint.y()); 
     }

 }

 void DefinedTitleBar::mousePressEvent(QMouseEvent* event)  //鼠标按下事件
 {
     QPoint _mouseCurrent_software = event->pos(); //获取鼠标相对于软件的坐标
     QPoint _mouseCurrent_windows = event->globalPos(); //获取鼠标相对于桌面的坐标

     int _titleBar_width = ui.widget_titleBar->width();  //标题栏的宽度
     int _titleBar_height = ui.widget_titleBar->height(); //标题栏的高度
     if (!isMaximized())
     {    
         //判断鼠标是否在标题栏范围内,如果在标题栏附近才能移动(标题栏 是拖到ui界面的 QFrame)
         if (_mouseCurrent_software.x()<= _titleBar_width&&_mouseCurrent_software.y()<=_titleBar_height)   
         {
             m_isPressed = true;
             m_startMovePos = event->globalPos();
         }
         else
         {
             m_isPressed = false;
         }
         
     }
    
 }



 void DefinedTitleBar::mouseReleaseEvent(QMouseEvent* event)  //鼠标释放事件
 {
     m_isPressed = false;
     qDebug() << QString::fromLocal8Bit("鼠标释放:") << endl
         <<endl << QString::fromLocal8Bit("鼠标相对于软件的坐标是:")  
         <<"(" << event->pos() << ")" << endl;    //pos 相对于软件


     qDebug() << QString::fromLocal8Bit("鼠标相对于桌面的坐标是:") 
         << "(" << event->globalPos() << ")"   //globalPos 相对于桌面

         << endl<<endl<<endl<<endl;
     
 }

 

标签:Qt,自定义,void,标题栏,QMouseEvent,QPoint,event,鼠标
来源: https://www.cnblogs.com/RedWetPlace/p/16533428.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有