Подтвердить что ты не робот

Показать окно в Qt без кражи фокуса

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Кроме того, убедитесь, что вы не вызываете QWidget:: activateWindow() в окне или в любом из его виджетов в любой точке.

Ответ 3

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

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

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