одного приложения в другое? Оба написаны на Qt. У каждого есть свои окна. Нужно по нажатию кнопки в одном приложении, поднять окно в другом. Казалось бы, задача тривиальная. Но нельзя просто сделать raise или show, под Windows в этом случае будет проблемы с передачей фокуса и т.д. Нужно как то передать фокус принимающему приложению и только после этого поднять нужное окно. Как это сделать нативными средствами Windows понятно, но это может поломать работу с фокусом внутри Qt
Возможно не совсем то, но тут есть про поднятия окна если приложение уже работает. https://github.com/qtproject/qt-solutions/tree/master/qtsingleapplication
спасибо, смотрел. При определенных кейсах это не отработает ))) Пробовал такой подход. Причем судя по всему только на винде
Вот кстати подводный камень виндовса переднего плана https://github.com/itay-grudev/SingleApplication/blob/master/Windows.md
спасибо, пошел смотреть
Средствами лишь Qt наверно нельзя. Ну и есть противоречие: что значит "Передать фокус.... поднть окно в другом ...передать фокус ... и только после этого поднять нужное окно" Что это значит ? Если ты передашь фокус, фокус будет в том окне , куда передал. Если ты "поднимаешь другое окно" - фокус соотв. перейдёт уже туда.
Можно через сокет/dbus/... смотря какая ОС передать второму приложению "команду"
мы так и делаем, передаем команду по IPC. На принимающей стороне делаем show, raise. Но дело в том, что на винде так делать нельзя
С помощью QLocalSocket поднимать сервер/клиент на каждом из экземпляров приложений и обмениваться командами между ними.
В чем проблема передать winId назад и активировать окно из первого инстанса?
Скорее всего так и будем делать. И юзать нативные ф-ции. Была надежда что у Qt уже что то есть под это
Обсуждают сегодня