代码实现:
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);
}