1

我正在使用 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());
}

你能给我推荐点别的吗?

4

1 回答 1

8

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

  • mouseOffset不必是指针,因为您正在不必要地创建动态内存,并且您有责任消除它。

  • 不需要每个分量都获取,QPoint支持减法

*。H

QPoint mouseOffset;

*.cpp

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

void ArianaApplication::mousePressEvent(QMouseEvent * event)
{
     mouseOffset = event->globalPos() - frameGeometry().topLeft();
}
于 2018-03-13T01:57:36.550 回答