QT软件开发:解决隐藏QWidget标题栏后窗体无法移动问题
【摘要】
一、前言
一般自定义标题栏时,就需要将原窗口的标题栏隐藏掉。默认情况下窗口无法被鼠标拖动的,需要自己处理鼠标事件,移动窗口达到拖动效果。
二、实现代码
只实现了窗口的拖动,随意拉伸没有实现。
如果要完美实现拉伸效果,可以看这里:
2.1 widget.h代码
#ifndef LOGIN_MAIN_H#define LOGIN...
一、前言
一般自定义标题栏时,就需要将原窗口的标题栏隐藏掉。默认情况下窗口无法被鼠标拖动的,需要自己处理鼠标事件,移动窗口达到拖动效果。
二、实现代码
只实现了窗口的拖动,随意拉伸没有实现。
如果要完美实现拉伸效果,可以看这里:
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
-
}
-
文章来源: xiaolong.blog.csdn.net,作者:DS小龙哥,版权归原作者所有,如需转载,请联系作者。
原文链接:xiaolong.blog.csdn.net/article/details/119057408
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)