Показать окно в Qt без кражи фокуса
Я использую библиотеку Qt, чтобы показать слайд-шоу на втором мониторе, когда пользователь не использует второй монитор. Примером является пользователь, играющий в игру на первом мониторе и показывающий слайд-шоу на втором мониторе.
Проблема в том, что когда я открываю новое окно в Qt, оно автоматически крадет фокус из предыдущего приложения. Есть ли способ предотвратить это?
3 ответа
Мне потребовалось некоторое время, чтобы найти это, но я нашел это: 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::activWindow() для окна или любого из его виджетов в любой точке.