QT软件开发:解决隐藏QWidget标题栏后窗体无法移动问题
Posted DS小龙哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT软件开发:解决隐藏QWidget标题栏后窗体无法移动问题相关的知识,希望对你有一定的参考价值。
一、前言
一般自定义标题栏时,就需要将原窗口的标题栏隐藏掉。默认情况下窗口无法被鼠标拖动的,需要自己处理鼠标事件,移动窗口达到拖动效果。
二、实现代码
只实现了窗口的拖动,随意拉伸没有实现。
如果要完美实现拉伸效果,可以看这里:
2.1 widget.h代码
#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
}
以上是关于QT软件开发:解决隐藏QWidget标题栏后窗体无法移动问题的主要内容,如果未能解决你的问题,请参考以下文章