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);
}
相关推荐
Cyber4K8 小时前
【Python专项】Nginx访问日志分析时间范围处理示例
开发语言·python·nginx
中犇科技8 小时前
郑州无代码APP开发公司哪家好呢?推荐
开发语言
周末也要写八哥8 小时前
代码中的注释的重要性(二)
开发语言·python
江南十四行10 小时前
Python生成器与协程:从迭代器到异步编程的进阶之路
开发语言·python
测试员周周10 小时前
【AI测试功能3】AI功能测试的三层架构:单元测试 → 集成测试 → E2E测试——AI系统测试金字塔实战指南
开发语言·人工智能·python·功能测试·架构·单元测试·集成测试
lly20240610 小时前
AppML 案例原型
开发语言
jllllyuz10 小时前
MATLAB 回声抵消(AEC)、噪声抑制(NS)、自动增益控制(AGC)完整实现
开发语言·matlab
froginwe1110 小时前
Vue.js 计算属性
开发语言
05候补工程师10 小时前
【408 从零到一】线性表逻辑特征、存储结构对比与 C/C++ 动态内存分配避坑指南
c语言·开发语言·数据结构·c++·考研
yongui4783410 小时前
MATLAB 使用遗传算法求解微电网优化配置数学模型
开发语言·matlab