我正在开发一个带有桌面Qt Framework的应用程序。由于我删除了每个窗口装饰,因此我必须实现主窗口以接收移动事件,当用户单击它并移动鼠标时。
我尝试了以下代码,但我不满意。我想知道是否有更好的方法可以更优雅。
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
支持减法。
*.h
QPoint mouseOffset;
*。.cpp
void ArianaApplication::mouseMoveEvent(QMouseEvent * event)
{
move(event->globalPos() - mouseOffset);
}
void ArianaApplication::mousePressEvent(QMouseEvent * event)
{
mouseOffset = event->globalPos() - frameGeometry().topLeft();
}