Я знаю, как сделать QWidget (в Qt4 или Qt5) / QWindow (начиная с Qt5) без полей, нарисовать собственную строку заголовка и вручную реализовать перетаскивание мышью, чтобы переместить окно на экране, просто отслеживая положение мыши с помощью некоторых mouseMoveEvent
и обновление положения окна.
Тем не менее, это движение ведет себя не так, как исходное, реализованное диспетчером окон. Например, перемещение окна рядом с границей экрана можно интерпретировать как «полноэкранный» или «разделенный экран»; или окна привязываются к границам друг друга, в зависимости от системы / оконного менеджера. Эти вещи не работают, если вы реализуете движение окна, как описано выше.
Google Chrome / Chromium — это только один пример для приложения, которое реализует настраиваемую строку заголовка окна и границу, но при этом адаптируется к собственному поведению оконного менеджера. Мне интересно, реализует ли это Chrome сам по себе (и обнаруживает ли оконный менеджер и его конфигурацию) или есть ли в большинстве оконных менеджеров некоторая функциональность (ясно, что она все еще сильно зависит от платформы) для того, чтобы сказать «запустить перемещение собственного окна» и «остановить движение родного окна» или подобное.
Возможно ли что-то подобное в Qt? Если нет, может быть, использовать другие библиотеки, такие как Qxt?
К вашему сведению: я в основном ориентируюсь на Windows и Linux, где я вижу трудности, с которыми может столкнуться пользователь любой оконный менеджер установлен.
Основываясь на недавних попытках сделать то же самое с Qt4, я боюсь, что ответ таков: вам нужно настроить этот менеджер для каждой платформы / окна. Я ожидаю, что патчи к QWindow для улучшения поведения в этой области будут приняты, но я не знаю ни одного стандартного хука, который бы сообщал OS / window-manager, чего вы пытаетесь достичь.
Точно так же Qt не должен мешать решить эту проблему, это просто область, где он не может ничего сделать, чтобы помочь вам в общем.
Других решений пока нет …