QT软件开发:解决隐藏QWidget标题栏后窗体无法移动问题

简介: QT软件开发:解决隐藏QWidget标题栏后窗体无法移动问题

一、前言

一般自定义标题栏时,就需要将原窗口的标题栏隐藏掉。默认情况下窗口无法被鼠标拖动的,需要自己处理鼠标事件,移动窗口达到拖动效果。

二、实现代码

只实现了窗口的拖动,随意拉伸没有实现。

如果要完美实现拉伸效果,可以看这里:

2.1 widget.h代码

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
}
目录
相关文章
|
7月前
|
前端开发 数据可视化 C++
Qt 之 QWidget QLabel
Qt 之 QWidget QLabel
46 0
|
API 计算机视觉
Qt实用技巧:自定义窗口标题栏
Qt实用技巧:自定义窗口标题栏
Qt实用技巧:自定义窗口标题栏
|
2天前
|
XML API 数据格式
【Qt 学习笔记】QWidget的enable属性 | API的介绍
【Qt 学习笔记】QWidget的enable属性 | API的介绍
32 0
Qt实用技巧:对QPushButton(等类似透明有黑色背景的QWidget实现透明/半透明的方法
Qt实用技巧:对QPushButton(等类似透明有黑色背景的QWidget实现透明/半透明的方法
Qt实用技巧:对QPushButton(等类似透明有黑色背景的QWidget实现透明/半透明的方法
Qt实用技巧:将QWidget作为输入窗口,接收键盘消息、输入法并且控制输入法悬浮工具栏位置控制
Qt实用技巧:将QWidget作为输入窗口,接收键盘消息、输入法并且控制输入法悬浮工具栏位置控制
关于 Qt场景QGraphicsScene中,添加QWidget窗口,QWidget窗口无法捕捉mouseReleaseEvent松开消息 的解决方法
关于 Qt场景QGraphicsScene中,添加QWidget窗口,QWidget窗口无法捕捉mouseReleaseEvent松开消息 的解决方法
关于 Qt场景QGraphicsScene中,添加QWidget窗口,QWidget窗口无法捕捉mouseReleaseEvent松开消息 的解决方法
|
计算机视觉
Qt实用技巧:使QWidget作为模态对话框显示
Qt实用技巧:使QWidget作为模态对话框显示
|
计算机视觉
Qt实用技巧:仅去掉标题栏,保持对话框边框
Qt实用技巧:仅去掉标题栏,保持对话框边框
|
计算机视觉
Qt实用技巧:QWidget中QPushButton成为可点击的图标(实现全透明,不论点击与否都只显示Icon)
Qt实用技巧:QWidget中QPushButton成为可点击的图标(实现全透明,不论点击与否都只显示Icon)
Qt隐藏系统标题栏,使用自定义标题栏
Qt隐藏系统标题栏,使用自定义标题栏
Qt隐藏系统标题栏,使用自定义标题栏

推荐镜像

更多