一、前言
一般自定义标题栏时,就需要将原窗口的标题栏隐藏掉。默认情况下窗口无法被鼠标拖动的,需要自己处理鼠标事件,移动窗口达到拖动效果。
只实现了窗口的拖动,随意拉伸没有实现。
如果要完美实现拉伸效果,可以看这里:
1.#ifndef LOGIN_MAIN_H #define LOGIN_MAIN_H #include <QWidget> namespace Ui { class login_main; } class login_main : public QWidget { Q_OBJECT public: ......... private slots: ......... protected: //截取鼠标事件绘制窗口位置. 因为标题栏隐藏后.窗口是无法拖动的。 void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); private: ......... bool isPressedWidget; QPoint m_lastPos; }; #endif // LOGIN_MAIN_H
2.2 widget.cpp代码
#include "login_main.h" #include "ui_login_main.h" login_main::login_main(QWidget *parent) : QWidget(parent), ui(new Ui::login_main) { ui->setupUi(this); setWindowFlags(Qt::FramelessWindowHint); } void login_main::mousePressEvent(QMouseEvent *event) { m_lastPos = event->globalPos(); isPressedWidget = true; // 当前鼠标按下的即是QWidget而非界面上布局的其它控件 } void login_main::mouseMoveEvent(QMouseEvent *event) { if (isPressedWidget) { this->move(this->x() + (event->globalX() - m_lastPos.x()), this->y() + (event->globalY() - m_lastPos.y())); m_lastPos = event->globalPos(); } } void login_main::mouseReleaseEvent(QMouseEvent *event) { qDebug()<<"鼠标松开"; m_lastPos = event->globalPos(); isPressedWidget = false; // 鼠标松开时,置为false }