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);
}
相关推荐
沐晓时光2 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
David猪大卫8 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
fengci.10 小时前
CTF2MISC中等部分
开发语言·前端·学习
xys_67811 小时前
JavaEE通关手册:初识Java
java·开发语言
慧都产品智能化12 小时前
Qt 表格升级攻略:复用已有编辑器,减少重复开发
c++·qt·编辑器·qt6.3
ShineWinsu12 小时前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
ShineWinsu13 小时前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem
吴名氏.14 小时前
Java转AI Agent教程(第十二周)检索与切分
java·开发语言·人工智能·ai·ai agent
瑞雪兆丰年兮14 小时前
JavaWeb-day10-SpringBootWeb案例
java·开发语言·javaweb·web
Elastic 中国社区官方博客14 小时前
更少的位数,相同的召回率:DiskBBQ 更保守的自动校准扫描
大数据·运维·开发语言·人工智能·elasticsearch·搜索引擎