Показать окно в Qt без кражи фокуса - PullRequest
34 голосов
/ 08 июня 2009

Я использую библиотеку Qt, чтобы показать слайд-шоу на втором мониторе, когда пользователь не использует второй монитор. Например, пользователь играет в игру на первом мониторе и показывает слайд-шоу на втором мониторе.

Проблема в том, что когда я открываю новое окно в Qt, оно автоматически крадет фокус из предыдущего приложения. Есть ли способ предотвратить это?

Ответы [ 3 ]

59 голосов
/ 20 июня 2009

Мне понадобилось время, чтобы найти его, но я нашел его: setAttribute(Qt::WA_ShowWithoutActivating);

Это заставляет окно не активироваться. Даже с флагом Qt::WindowStaysOnTopHint

4 голосов
/ 29 июня 2014

Если вы хотите сделать плавающее окно предварительного просмотра / любой другой виджет, просто используйте ниже

thumbnail = new QLabel;
thumbnail->setAttribute(Qt::WA_ShowWithoutActivating);
thumbnail->setParent(0);
thumbnail->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);

Qt :: Tool - важный флаг, чтобы он работал. Я имею в виду не красть фокус.

3 голосов
/ 19 июня 2009

Виджеты не принимают фокус по умолчанию, но, вероятно, вы не создали простой виджет? Какой подкласс это был? QMainWindow или что-то еще?

Возможно, подклассы окна по умолчанию принимают фокус, поэтому попробуйте явно вызвать QWidget :: setFocusPolicy с Qt :: NoFocus перед вызовом QWidget :: show ().

Также убедитесь, что вы не вызываете QWidget :: activWindow () для окна или любого из его виджетов в любой точке.

...