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);
}