//last 和pos0是myForm的私有变量
//mainFrame是你要让他有拖动效果的组件
void myForm::mouseMoveEvent(QMouseEvent *e)
{
//处理整个范围内的事件,可以自己更改范围
QPoint temp = e->pos();
const int pos_min_x = ui.mainFrame->pos().x();
const int pos_max_x = pos_min_x + ui.mainFrame->width();
const int pos_min_y = ui.mainFrame->pos().y();
const int pos_max_y = pos_min_y + ui.mainFrame->height();
if( (temp.x() > pos_min_x) && (temp.x() < pos_max_x) &&
(temp.y() > pos_min_y) && (temp.y() < pos_max_y))
{
QPoint newpos = e->globalPos();
QPoint upleft = pos0 + newpos - last;
this->move(upleft);
}
}
void myForm::mousePressEvent(QMouseEvent *e)
{
QPoint temp = e->pos();
const int pos_min_x = ui.mainFrame->pos().x();
const int pos_max_x = pos_min_x + ui.mainFrame->width();
const int pos_min_y = ui.mainFrame->pos().y();
const int pos_max_y = pos_min_y + ui.mainFrame->height();
if( (temp.x() > pos_min_x) && (temp.x() < pos_max_x) &&
(temp.y() > pos_min_y) && (temp.y() < pos_max_y))
{
last = e->globalPos();
pos0 = e->globalPos() -e->pos();
}
}