qt 窗口无标题在桌面移动,不可移出可视范围之外

来源:互联网 发布:bt python源代码下载 编辑:程序博客网 时间:2024/04/29 22:21

下面是基类的源代码,把所需求移动的窗口类继承这个基类即可

头文件:

/************************************************************************//*BaseWidget.h                                                          *//************************************************************************/#ifndef BASEWIDGET_H#define BASEWIDGET_H#include <QWidget>class BaseWidget : public QWidget{Q_OBJECTpublic:BaseWidget(QWidget *parent = 0);~BaseWidget();protected:void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent*event);bool m_moving;//用来标记是否鼠标移动QPoint m_offset;private:};#endif // BASEWIDGET_H

CPP文件:

/************************************************************************//* BaseWidget.cpp                                                       *//************************************************************************/#include "BaseWidget.h"#include <QMouseEvent>#include <QDesktopWidget>#include <QApplication>BaseWidget::BaseWidget(QWidget *parent): QWidget(parent,Qt::FramelessWindowHint),m_moving(false){}BaseWidget::~BaseWidget(){}void BaseWidget::mousePressEvent( QMouseEvent *event ){if((event->button() == Qt::LeftButton)){m_moving = true;m_offset = event->pos();}}void BaseWidget::mouseMoveEvent( QMouseEvent *event ){if(m_moving){//方法1:QDesktopWidget* desktop = QApplication::desktop();QRect windowRect(desktop->availableGeometry());QRect widgetRect(this->geometry());QPoint point(event->globalPos() - m_offset);//以下是防止窗口拖出可见范围外//左边if (point.x() <= 0){point = QPoint(0,point.y());}//右边int y = windowRect.bottomRight().y() - this->size().height();if (point.y() >= y && widgetRect.topLeft().y() >= y){point = QPoint(point.x(),y);}//上边if (point.y() <= 0){point = QPoint(point.x(),0);}//下边int x = windowRect.bottomRight().x() - this->size().width();if (point.x() >= x && widgetRect.topLeft().x() >= x){point = QPoint(x,point.y());}move(point);//方法2://可以通过判断QRect windowRect是否包含(contains) QRect widgetRect 再移动//这里没有给出代码}//如果只是要求移动窗口,用以下代码即可实现//move(event->globalPos() - m_offset);}void BaseWidget::mouseReleaseEvent( QMouseEvent*event ){if(event->button() == Qt::LeftButton)m_moving = false;}



0 0
原创粉丝点击