Есть ли лучший способ переместить окно?
Я работаю над приложением с 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();
}