当前位置: 首页 > article >正文

Qt 鼠标左键推拽界面

代码实现:
button 返回 哪个按钮造成了此事件,buttons 返回 发生此事件时哪些按钮还处于按下状态

对于ComboBox这种控件有bug,我也不知道咋修改

private:
	    // 记录坐标差值
    QPoint diff;
    QPoint now_pos;
    bool m_MouseDrag;

void Dialog::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton) {
    	m_MouseDrag = true;
                      // 鼠标在全局的位置     // 界面左上角在全局的位置
        this->diff = event->globalPos() - this->frameGeometry().topLeft();
        // 如果是通过界面里的某个部件,进行拖拽移动,获取界面左上角在全局的位置是比较麻烦的
        // 需要用其父类来获取,直接调用parent()函数得到是Object类型,没有frameGeometry成员函数
        // 需要强转为父类 ((QWidget *)this->parent())->frameGeometry.topLeft()
        // 这里只是以父类为 QWidget 为例
        return;
    }
    QDialog::mousePressEvent(event);
}

void Dialog::mouseMoveEvent(QMouseEvent *event)
{
    if(m_MouseDrag && event->buttons() == Qt::LeftButton) {
        QPoint now_pos = event->globalPos() - this->diff;
        this->move(now_pos);
        return;
    }
    QDialog::mouseMoveEvent(event);
}

void Dialog::mouseReleaseEvent(QMouseEvent *event)
{
    // 释放鼠标事件(左键)
    if(event->button() == Qt::LeftButton){
        m_MouseDrag = false;
        return;
    }
    QDialog::mouseReleaseEvent(event);
}

http://www.kler.cn/a/163430.html

相关文章:

  • 【Linux篇】面试——用户和组、文件类型、权限、进程
  • XML Schema 字符串数据类型
  • JavaScript数组去重的实用方法汇总
  • 【入门篇】A+B Problem——多语言版
  • 现代Web开发:Vue 3 组件化开发实战
  • 鸿蒙next版开发:ArkTS组件通用属性(Z序控制)
  • bash中通过变量中的内容获取对应的关联数组
  • Navicat 技术指引 | 适用于 GaussDB 分布式的日志查询与配置设置
  • JWT介绍及演示
  • 自动抓取App数据
  • 笔记-基于CH579M模块通过网线直连电脑进行数据收发(无需网络)
  • 搜索引擎和网络浏览器之间的区别
  • 【Linux系统化学习】进程地址空间 | 虚拟地址和物理地址的关系
  • 【漏洞复现】FLIR AX8红外线热成像仪命令执行漏洞
  • Realme X7 Pro Root 刷机教程
  • 【PyTorch】 暂退法(dropout)
  • C# Solidworks二次开发:选择管理器相关的API介绍
  • 使用 PyTorch 进行 K 折交叉验证
  • 轻量封装WebGPU渲染系统示例<43>- PBR材质与阴影实(源码)
  • Selenium+Unittest+HTMLTestRunner框架更改为Selenium+Pytest+Allure(二)
  • 高通CRM的v4l2驱动模型
  • 【嵌入式C语言】《字符串-----数字》转换函数总结
  • 国产化软件突围!怿星科技eStation产品荣获2023铃轩奖“前瞻优秀奖”
  • 【MySQL】聚合函数和分组(查找)
  • 基于深度学习路径规划RRT*-训练图像预处理
  • 制作一个RISC-V的操作系统四-嵌入式开发介绍