Qt 鼠标左键推拽界面

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

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

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. Qt 鼠标界面

    2023-12-10 02:54:02       61 阅读
  2. MFC:鼠标

    2023-12-10 02:54:02       34 阅读
  3. vscode 系列文章目录 - ctrl+鼠标无效

    2023-12-10 02:54:02       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-10 02:54:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-10 02:54:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-10 02:54:02       82 阅读
  4. Python语言-面向对象

    2023-12-10 02:54:02       91 阅读

热门阅读

  1. 软件设计原则-开闭原则

    2023-12-10 02:54:02       56 阅读
  2. Node CLI 之 Commander.js (1)

    2023-12-10 02:54:02       61 阅读
  3. C# --线程的进化史

    2023-12-10 02:54:02       50 阅读
  4. 偶数位字符前置算法

    2023-12-10 02:54:02       61 阅读