Qt无边框

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

#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
#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);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/684936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何把试卷上的字去掉再打印?分享三种方法

如何把试卷上的字去掉再打印&#xff1f;随着科技的不断发展&#xff0c;现代教育和学习方式也在逐渐变革。在学习过程中&#xff0c;我们经常需要对试卷进行整理和分析&#xff0c;以便更好地掌握知识点和复习。然而&#xff0c;传统的试卷整理方法往往效率低下且容易出错。幸…

六月的魔力:揭秘2024年加密市场与Reflection的创新与收益

回想过去加密货币市场的沉浮&#xff0c;一年中市场的阶段性牛市大多发生在下半年&#xff0c;六月似乎是一个神奇的时间节点。每年六月一到&#xff0c;加密货币市场仿佛突然被按下启动按钮&#xff0c;沉寂的土狗开始扶苏&#xff0c;经过半年准备的各大项目方开始蠢蠢欲动。…

27-unittest之断言(assert)

在测试方法中需要判断结果是pass还是fail&#xff0c;自动化测试脚本里面一般把这种生成测试结果的方法称为断言&#xff08;assert&#xff09;。 使用unittest测试框架时&#xff0c;有很多的断言方法&#xff0c;下面介绍几种常用的断言方法&#xff1a;assertEqual、assert…

MySql每天从0开始生成特定规则自增编号

一、前言 1、按一定规则生单号&#xff0c;要求不重复 2、例如&#xff1a;前缀 日期 不重复流水号&#xff0c;whgz-20240528-00001 二、数据库操作 1、MySQL新建一张表sys_sequence seq_name 序列名称 current_val 当前编号 increment_val 步长 CREATE TABLE sys_sequ…

kafka-消费者-消费异常处理(SpringBoot整合Kafka)

文章目录 1、消费异常处理1.1、application.yml配置1.2、注册异常处理器1.3、消费者使用异常处理器1.4、创建生产者发送消息1.5、创建SpringBoot启动类1.6、屏蔽 kafka debug 日志 logback.xml1.7、引入spring-kafka依赖1.8、消费者控制台&#xff1a;1.8.1、第一次启动SpringK…

【案例分享】明道数云为阿联酋迪拜公司Eastman BLDG打造外贸管理系统

内容概要 本文介绍了Eastman公司与明道数云软件的合作&#xff0c;通过数字化解决方案提升了Eastman在贸易管理中的效率。Eastman公司位于阿联酋迪拜&#xff0c;周边城市有门店&#xff0c;人数大概在30&#xff0c;是一家主营瓷砖和石材类产品的贸易公司&#xff0c;面临着各…

C#,JavaScript实现浮点数格式化自动保留合适的小数位数

目标 由于浮点数有漂移问题&#xff0c;转成字符串时 3.6 有可能得到 3.6000000000001&#xff0c;总之很长的一串&#xff0c;通常需要截取&#xff0c;但按照固定长度截取不一定能使用各种情况&#xff0c;如果能根据数值大小保留有效位数就好了。 C#实现 我们可以在基础库里…

linux实验报告

实验一&#xff1a;Linux操作系统的安装与配置 实验目的&#xff1a; 1.掌握虚拟机技术&#xff1b; 2.掌握Linux的安装步骤&#xff1b; 3.掌握安装过程中的基本配置要求。 4.掌握正确启动Linux的方法&#xff1b; 5.掌握正确退出Linux的方法&#xff1b; 6.熟悉已安装…

【Python】把xmind转换为指定格式txt文本

人工智能训练通常需要使用文本格式&#xff0c;xmind作为一种常规格式不好进行解析&#xff0c;那如何把xmind转换为txt格式呢&#xff1f; 软件信息 python python -v Python 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)] on win32…

C#知识|通过ADO.NET实现应用程序对数据库的查询操作。

哈喽,你好啊,我是雷工! 前边学习了通过ADO.NET实现C#应用程序对数据库的增、删、改操作。 接下来接着学习查询操作,以下为学习笔记。 查询返回有两种类型,一种是单行单列的单一结果,一种是结果集,首先了解查询结果是单行单列结果的写法。 01 查询返回单一结果 以前方的…

Python编程学习第一篇——Python零基础快速入门(五)—元组(Tuple)操作

Python元组是一种不可变的有序集合&#xff0c;可以存储多个不同类型的数据。元组使用小括号来表示&#xff0c;其中的元素用逗号分隔开。与列表不同&#xff0c;元组的元素不能被修改、删除或添加。它的一些常规操作包括元组的创建、访问、添加、修改、删除、运算等等&#xf…

编译原理-程序设计语言的设计

变量 存储单元及它的名称由变量的概念来代替; 可以代表一个或一组单元,可以修改。 绑定 绑定:一个实体(或对象)与其某种属性建立起某种联系的 过程,称为绑定。 静态绑定:凡是在编译时能确定的属性,称为静态属性; 若绑定在编译时完成,运行时不改变,称为静态…

武汉科技大学,计算机考研全面改考408,24计算机专硕复试线仅298分!武汉科技大学计算机考研考情分析!

武汉科技大学&#xff08;Wuhan University of Science and Technology&#xff09;简称“武科大”&#xff0c;坐落于湖北省武汉市&#xff0c;是湖北省人民政府、教育部和六家国家特大型企业共建高校&#xff0c;是湖北省“双一流”建设重点高校&#xff0c;入选国家“中西部…

高考志愿填报自动更新数据小程序开源版开发

高考志愿填报自动更新数据小程序开源版开发 版本一&#xff1a;java开源域名授权&#xff08;自动更新数据&#xff09;&#xff1b;5999 自研RSCH算法&#xff0c;专业和测评综合推算 微信一键登录注册&#xff0c;免注册获取微信头像、昵称 支持院校和专业优先&#xff0c;…

28 - 只出现一次的最大数字(高频 SQL 50 题基础版)

28 - 只出现一次的最大数字 select (selectnumfromMyNumbers group bynum havingcount(num)1order by num desc limit 1) as num;

Doris insert into 插入语句执行成功,且select查询成功,返回结果不报错,但查不到该插入数据

问题&#xff1a;Doris insert into 正常执行成功&#xff0c;select 查询也执行成功&#xff0c;但查不到该写入数据 原因&#xff1a;由于有其他 insert commit 事务待提交且该任务处于锁的状态&#xff0c;导致不断在回滚&#xff0c;进而造成其他的insert into 语句也执行成…

广西容县“四力”并举提质效,正宇软件助力智慧人大建设

近日&#xff0c;广西容县在提升人大代表履职质效方面取得显著成效&#xff0c;通过汇聚“四力”——活力、动力、合力、能力&#xff0c;成功打造了一个高效、务实的人大代表履职环境。这一成果不仅为当地人大工作树立了新的标杆&#xff0c;也为广西乃至全国的人大代表履职模…

24-unittest简介

一、unittest简介 unittest是Python中常用的单元测试框架&#xff0c;与Java中的Junit单元测试框架类似。 二、示例程序 1&#xff09;导入unittest模块 import unittest 2&#xff09;使用help()函数查看源码中的示例程序 help(unittest) Simple usage:import unittestc…

数组和指针的联系(C语言)

数组和指针是两种不同的数据类型&#xff0c;数组是一种构造类型&#xff0c;用于存储一组相同类型的变量&#xff1b;而指针是一种特殊类型&#xff0c;专门用来存放数据的地址。数组名除了sizeof(数组名)和&数组名表示整个数组外&#xff0c;其他情况下都表示的是首元素的…

Visual Studio Code 开发esp8266流程2Arduino 配置 nodemcu

http://arduino.esp8266.com/stable/package_esp8266com_index.json http://arduino.esp8266.com/stable/package_esp8266com_index.json Arduino: Library Manager Arduino: Board