Pergunta

Eu estou usando a biblioteca Qt para mostrar uma apresentação de slides no segundo monitor quando o usuário não está usando o segundo monitor. Um exemplo é o usuário jogando um jogo no primeiro monitor e mostrando o slideshow no segundo monitor.

O problema é que quando eu abrir uma nova janela em Qt, ele rouba automaticamente o foco da aplicação anterior. Existe alguma maneira de impedir que isso aconteça?

Foi útil?

Solução

Levei algum tempo para encontrá-lo, mas eu achei: setAttribute(Qt::WA_ShowWithoutActivating);

Isso força o janela não para ativar. Mesmo com a bandeira Qt::WindowStaysOnTopHint

Outras dicas

Se você quiser fazer caixa de visualização flutuante / qualquer outro widget usar apenas abaixo

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

Qt :: Tool é importante bandeira para que ele funcione. Eu não quero dizer roubar foco.

Widgets não aceitam foco por padrão, mas provavelmente você não tiver criado um widget simples? Que subclasse era? QMainWindow ou algo mais?

É possível que o subclasses janela padrão para aceitar o foco de modo a tentar explicitamente chamando QWidget :: setFocusPolicy com Qt :: NoFocus antes de chamar QWidget :: show ().

Além disso, certifique-se que você não está chamando QWidget :: ActivateWindow () na janela ou qualquer de seus Widgets em qualquer ponto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top