Это выглядит довольно старая тема. Однако я не видел, чтобы кто-нибудь отправлял правильный ответ, который просто работает, поэтому я публикую свое решение той же проблемы, с которой я недавно столкнулся.
Прежде всего, если вы хотите, чтобы ваш диалог не захватывал фокус из других диалогов или полей ввода, вы должны установить следующее свойство: Qt :: WA_ShowWithoutActivating . Используя это свойство, окно (диалоговое окно также является окном) будет отображаться без активации. Затем, возможно, вы захотите настроить свой диалог в соответствии со своими потребностями, и вы захотите, чтобы этот диалог отображался сверху. Таким образом, следующие квестовые флаги могут быть установлены для достижения такого результата кроссплатформенным образом: Qt :: FramelessWindowHint | Qt :: NoDropShadowWindowHint | Qt :: X11BypassWindowManagerHint | Qt :: Tool | Qt :: WindowStaysOnTopHint | Qt :: WindowTransparentForInput | Qt :: WindowDoesNotAcceptFocus .
Приведенный ниже код является одним из примеров того, как создать диалоговое окно, которое немодально, и не привлекает внимание ни у кого (при условии, что dialog - это переменная, указывающая на действительный экземпляр QDialog):
dialog->setAttribute(Qt::WA_ShowWithoutActivating, true);
dialog->setWindowFlags(dialog.windowFlags() | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint | Qt::X11BypassWindowManagerHint | Qt::Tool | Qt::WindowStaysOnTopHint | Qt::WindowTransparentForInput | Qt::WindowDoesNotAcceptFocus);