zoukankan      html  css  js  c++  java
  • Qt实现无标题无边窗口的整体 拖拽 功能

      在没有标题栏和边框的情况下想拖动窗体,如果不单独处理是不能拖动的,想实现这个拖动功能其实很简单,只需要重写以下三个鼠标函数即可:

    mousePressEvent、mouseMoveEvent、mouseReleaseEvent。

     1 window.h头文件:
     2 
     3 #ifndef _WINDOW_H
     4 #define _WINDOW_H
     5 
     6 #include <QMainWindow>
     7 #include <QApplication>
     8 #include <QMouseEvent>
     9 
    10 namespace Ui {
    11 class Window;
    12 }
    13 
    14 class Window : public QMainWindow
    15 {
    16     Q_OBJECT
    17 
    18 public:
    19     explicit Window (QWidget* parent = 0);
    20     ~Window();
    21 
    22 protected:
    23     void mousePressEvent(QMouseEvent *event);
    24     void mouseMoveEvent(QMouseEvent *event);
    25     void mouseReleaseEvent(QMouseEvent *event);
    26 
    27 private:
    28     Ui::Window* m_ui;
    29 
    30     bool m_move;
    31     QPoint m_startPoint;
    32     QPoint m_windowPoint;
    33 
    34 };
    35 
    36 #endif
    window.cpp文件:


    #include "Window.h" #include "ui_Window.h" Window::Window (QWidget* parent) : QMainWindow (parent) { m_ui = new Ui::Window; m_ui->setupUi (this); /*设置无边、无标题栏窗口*/ this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint); /*给是否移动的标志初始化为false*/ m_move = false; } Window::~Window() { delete m_ui; } void Window::mousePressEvent(QMouseEvent *event) { /*当鼠标左键点击时.*/ if (event->button() == Qt::LeftButton) { m_move = true; /*记录鼠标的世界坐标.*/ m_startPoint = event->globalPos(); /*记录窗体的世界坐标.*/ m_windowPoint = this->frameGeometry().topLeft(); } } void Window::mouseMoveEvent(QMouseEvent *event) { if (event->buttons() & Qt::LeftButton) { /*移动中的鼠标位置相对于初始位置的相对位置.*/ QPoint relativePos = event->globalPos() - m_startPoint; /*然后移动窗体即可.*/ this->move(m_windowPoint + relativePos ); } } void Window::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { /*改变移动状态.*/ m_move = false; } }
  • 相关阅读:
    JProfiler_SN_8_x key
    java格式化百分比
    获取每月第一天最后一天 java
    java 获取昨天日期
    eclipse git提交代码
    SIT与UAT的分别
    Spring <context:annotation-config/> 说明
    Hibernate日期映射类型
    Oracle查询备注信息
    Log4J入门
  • 原文地址:https://www.cnblogs.com/acmexyz/p/11542435.html
Copyright © 2011-2022 走看看