当前位置:   article > 正文

Qt隐藏标题栏,鼠标实现窗口右下角放缩窗口_qdialog隐藏标题栏

qdialog隐藏标题栏
  1. #include <QPoint>
  2. #include <QMouseEvent>
  3. #include <QTimer>
  4. class CDemo : public QDialog
  5. {
  6. Q_OBJECT
  7. public:
  8. CDemo(QWidget *parent = Q_NULLPTR);
  9. protected:
  10. void mouseMoveEvent(QMouseEvent *event);
  11. void mousePressEvent(QMouseEvent *event);
  12. void mouseReleaseEvent(QMouseEvent* event);//鼠标释放事件
  13. private:
  14. Ui::CDemoClass ui;
  15. private:
  16. bool m_isLeftPressed = false; //判断是否是左键点击
  17. QPoint m_clickedPositon; //获取鼠标左键按下时光标在全局(屏幕而非窗口)的位置
  18. int m_distance=20;
  19. };
  1. #include "CDemo.h"
  2. #include <QPushButton>
  3. #include <QDebug>
  4. CDemo::CDemo(QWidget *parent)
  5. : QDialog(parent)
  6. {
  7. ui.setupUi(this);
  8. this->setWindowFlags(Qt::FramelessWindowHint); //隐藏菜单栏
  9. setMouseTracking(true);//设置鼠标追踪
  10. }
  11. void CDemo::mouseMoveEvent(QMouseEvent *event)
  12. {
  13. Q_UNUSED(event);
  14. if (this->isFullScreen()) return;//全屏时不处理
  15. QPoint t_pos(this->geometry().width(), this->geometry().height());
  16. m_distance = QLineF(t_pos, event->pos()).length();
  17. if ( m_distance < 10){
  18. setCursor(Qt::SizeFDiagCursor);
  19. }else{
  20. setCursor(Qt::ArrowCursor);
  21. }
  22. if (m_isLeftPressed)//是否左击
  23. {
  24. QPoint t_pos = event->globalPos();//当前鼠标在桌面上的位置
  25. t_pos = t_pos - m_clickedPositon;//减去点击时的点,得到新的点(x,y)是右下角的移动距离
  26. QRect t_lastWidget = this->geometry();//窗口的几何位置
  27. t_lastWidget.setBottomRight(t_lastWidget.bottomRight() + t_pos);//改变窗口右下角的位置
  28. //设置最小大小
  29. if (t_lastWidget.size().width()<200 || t_lastWidget.size().height() < 200)
  30. {
  31. return;
  32. }
  33. this->setGeometry(t_lastWidget);//更新窗口的集合位置
  34. m_clickedPositon = event->globalPos();//更新位置
  35. }
  36. }
  37. void CDemo::mousePressEvent(QMouseEvent *event)
  38. {
  39. Q_UNUSED(event);
  40. if (event->button() == Qt::LeftButton && m_distance < 10)
  41. {
  42. this->m_isLeftPressed = true;
  43. QPoint t_pos = event->globalPos();
  44. m_clickedPositon = t_pos;//记录点击时的点的坐标
  45. }
  46. }
  47. void CDemo::mouseReleaseEvent(QMouseEvent* event)
  48. {
  49. Q_UNUSED(event);
  50. if (m_isLeftPressed)
  51. m_isLeftPressed = false;
  52. setCursor(Qt::ArrowCursor);
  53. }

重写鼠标移动事件就可以了,如果想实现其它位置的缩放,可以自己根据鼠标的位置来实现,思路都是一样的

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/616563
推荐阅读
相关标签
  

闽ICP备14008679号