Qt 鼠标左键推拽界面

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

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

cpp 复制代码
private:
	    // 记录坐标差值
    QPoint diff;
    QPoint now_pos;
    bool m_MouseDrag = false; // 一定要记得初始化为false

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);
}
相关推荐
智嵌研习社1 小时前
Ollama 本地大模型完全配置指南:Modelfile 参数与系统环境变量深度解析
java·开发语言
XZ-0700012 小时前
1-1-可视化-练习
开发语言·python
橙橙笔记2 小时前
Python学习第三部分
开发语言·python·学习
huainingning2 小时前
个人版WorkBuddy编写设备巡检并导出设备配置python脚本
开发语言·python
Java后端的Ai之路2 小时前
02、Python普通工厂模式
开发语言·人工智能·python·设计模式·普通工厂模式
韶博雅3 小时前
开启补充日志
java·开发语言·sql
被怪兽吃掉了3 小时前
5.2.1一维组数定义方式
开发语言·c++·算法
TheBestRucy3 小时前
Python 九阳神功之肆:网络编程 · Socket 从入门到实战
开发语言·网络·python
j7~3 小时前
【C++】《C++二叉搜索树(BST)从入门到精通:概念、实现与Key/Value模型全解析》
开发语言·c++·学习·二叉搜索树
hehelm3 小时前
仿muduo库实现高并发服务器—Channel类
linux·服务器·开发语言·网络·c++