有没有更好的方法来移动 window?

Is there any better way to move a window?

我正在使用 Qt Framework for desktop 开发一个应用程序。因为我删除了每个 window 装饰,所以我必须实现主要的 window 来接收用户单击它并移动鼠标时的移动事件。

我尝试了下面的代码,但我不满意。我想知道是否有更好的方法可以更优雅地做到这一点。

QPoint* mouseOffset; //global variable that hold distance of the cursor from 
                       the top left corner of the window.

void ArianaApplication::mouseMoveEvent(QMouseEvent* event)
{
     move(event->screenPos().x() - mouseOffset->x(),
          event->screenPos().y() - mouseOffset->y());
}

void ArianaApplication::mousePressEvent(QMouseEvent*)
{
     mouseOffset = new QPoint(QCursor::pos().x() - pos().x(),
                              QCursor::pos().y() - pos().y());
}

你能给我一些建议吗?

方法是正确的,但实现上可以改进以下几点:

  • mouseOffset 不一定是指针,因为您不必要地创建了动态内存,您有责任消除它。

  • 不需要获取每个组件,QPoint支持subtraction

*.h

QPoint mouseOffset;

*.cpp

void ArianaApplication::mouseMoveEvent(QMouseEvent * event)
{
     move(event->globalPos() - mouseOffset);
}

void ArianaApplication::mousePressEvent(QMouseEvent * event)
{
     mouseOffset = event->globalPos() - frameGeometry().topLeft();
}