Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top