@kokapuk

Как сделать безрамочное перетаскиваемое окно Qt?

Я знаю про способы по типу
void mousePressEvent(QMouseEvent *evt)
        {
            oldPos = evt->globalPos();
        }

        void mouseMoveEvent(QMouseEvent *evt)
        {
            const QPoint delta = evt->globalPos() - oldPos;
            if (locked)
                // if locked, ignore delta on y axis, stay at the top
                move(x()+delta.x(), y()); 
            else
                move(x()+delta.x(), y()+delta.y());
            oldPos = evt->globalPos();
        }

Но я хотел узнать, возможно ли сделать это более правильно, например как в WPF, просто при ивенте на клик вызывать DragMove(). Или как в electrone, просто обозначив DragRegion? Просто ,например, тот же телеграм десктоп, насколько я знаю, он на Qt, и при этом у него безрамочное окно с "правильным" перетаскиванием.
  • Вопрос задан
  • 349 просмотров
Решения вопроса 1
Zifix
@Zifix Куратор тега Qt
Barbatum
Относительно недавно появилась вот такая штука: https://www.qt.io/blog/custom-window-decorations

До 5.15 простого способа не было, так что если вам нужна более старая версия, можно не изобретать велосипед, а взять готовую реализацию: https://github.com/search?q=Qt+frameless
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы