Есть ли лучший способ переместить окно?

Я работаю над приложением с 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());
}

Не могли бы вы предложить мне что-нибудь еще?

1 ответ

Решение

Метод правильный, но его реализация может быть улучшена в следующих пунктах:

  • mouseOffset не обязательно быть указателем, так как вы создаете динамическую память без необходимости, и вы несете ответственность за ее устранение.

  • Нет необходимости получать каждый компонент, QPoint поддерживает вычитание.

*.час

QPoint mouseOffset;

*.cpp

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

void ArianaApplication::mousePressEvent(QMouseEvent * event)
{
     mouseOffset = event->globalPos() - frameGeometry().topLeft();
}
Другие вопросы по тегам