移动窗户有没有更好的方法?

1 c++ qt qt5 qmouseevent

我正在使用Qt Framework for desktop的应用程序.由于我删除了每个窗口装饰,我必须实现主窗口,以便在用户单击并移动鼠标时接收移动事件.

我尝试了以下代码,但我不满意.我想知道是否有更好的方式来更优雅.

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());
}
Run Code Online (Sandbox Code Playgroud)

你能给我别的建议吗?

eyl*_*esc 8

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

  • mouseOffset 没有必要成为一个指针,因为你不必要地创建动态内存,你有责任消除它.

  • 没有必要获得每个组件,QPoint支持减法.

*.H

QPoint mouseOffset;
Run Code Online (Sandbox Code Playgroud)

*的.cpp

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

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