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);
}
相关推荐
kaixin_learn_qt_ing2 分钟前
Golang
开发语言·后端·golang
ddd...e_bug4 分钟前
Shell和Bash介绍
开发语言·bash
C4程序员44 分钟前
Java百度身份证识别接口实现【配置即用】
java·开发语言
unityのkiven1 小时前
C++中的虚表和虚表指针的原理和示例
开发语言·c++
炒空心菜菜1 小时前
MapReduce 实现 WordCount
java·开发语言·ide·后端·spark·eclipse·mapreduce
(・Д・)ノ1 小时前
python打卡day27
开发语言·python
芯眼1 小时前
STM32启动文件详解(重点)
java·开发语言·c++·stm32·单片机·mybatis
愚润求学2 小时前
【Linux】动静态库链接原理
linux·运维·服务器·开发语言·笔记
呦呦彬2 小时前
【问题排查】easyexcel日志打印Empty row!
java·开发语言·log4j
Tummer83632 小时前
C#+WPF+prism+materialdesign创建工具主界面框架
开发语言·c#·wpf