Qt无边框

最简单的可拖动对话框(大小不可改变)

cpp 复制代码
#ifndef DIALOG_H
#define DIALOG_H

/**
 * @file dialog.h
 * @author lpl
 * @brief 无边框dialog类
 * @date 2024/06/05
 */
#include <QDialog>
#include <QMouseEvent>
namespace Ui {
class Dialog;
}
/**
 * @brief The Dialog class
 * 无边框dialog
 */
class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    /**
     * @brief mousePressEvent   鼠标点击事件
     * @param ev 鼠标事件
     */
    virtual void mousePressEvent(QMouseEvent *ev) override;
    /**
     * @brief mouseMoveEvent   鼠标移动事件
     * @param ev 鼠标事件
     */
    virtual void mouseMoveEvent(QMouseEvent *ev) override;
    /**
     * @brief mouseReleaseEvent   鼠标释放事件
     * @param ev 鼠标事件
     */
    virtual void mouseReleaseEvent(QMouseEvent *ev) override;
private:
    Ui::Dialog *ui;
    bool                    m_bIsPress;        ///< 是否点击鼠标
    QPoint                  m_pointMoveDis;    ///< 鼠标与电脑窗体左上角的相对位置
};

#endif // DIALOG_H
cpp 复制代码
#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
#include <QMouseEvent>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::mousePressEvent(QMouseEvent *ev)
{
    qDebug()<<ev->globalPos();
    //按下鼠标左键
    if(Qt::LeftButton == ev->button()){
        m_pointMoveDis = ev->globalPos();
        m_bIsPress = true;
    }
    QDialog::mousePressEvent(ev);
}

void Dialog::mouseMoveEvent(QMouseEvent *ev)
{
     if (ev->buttons() & Qt::LeftButton)
     {
         if(m_bIsPress)
         {
             QPoint movePos = ev->globalPos();
             this->move(this->pos() + movePos - m_pointMoveDis);
             m_pointMoveDis = movePos;
         }
     }
     QDialog::mouseMoveEvent(ev);
}

void Dialog::mouseReleaseEvent(QMouseEvent *ev)
{
    if(Qt::LeftButton == ev->button())
    {
        m_bIsPress = false;
    }

    QDialog::mouseReleaseEvent(ev);
}
相关推荐
爱吃喵的鲤鱼5 分钟前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
DARLING Zero two♡32 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
7年老菜鸡33 分钟前
策略模式(C++)三分钟读懂
c++·qt·策略模式
Gu Gu Study34 分钟前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言
芊寻(嵌入式)1 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
一颗松鼠1 小时前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
有梦想的咸鱼_1 小时前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
海阔天空_20131 小时前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
天下皆白_唯我独黑1 小时前
php 使用qrcode制作二维码图片
开发语言·php
夜雨翦春韭1 小时前
Java中的动态代理
java·开发语言·aop·动态代理