Question

J'utilise la bibliothèque Qt pour afficher un diaporama sur le second moniteur lorsque l'utilisateur n'utilise pas le second moniteur. Un exemple est l'utilisateur de jouer un jeu dans le premier moniteur et montrant le diaporama dans le second moniteur.

Le problème est que quand j'ouvre une nouvelle fenêtre dans Qt, il vole automatiquement la mise au point de l'application précédente. Est-il possible d'éviter que cela se produise?

Était-ce utile?

La solution

Il m'a fallu un certain temps pour trouver, mais je l'ai trouvé: setAttribute(Qt::WA_ShowWithoutActivating);

Cela force la fenêtre de ne pas activer. Même avec le drapeau Qt::WindowStaysOnTopHint

Autres conseils

Si vous voulez faire flotter la boîte de prévisualisation / tout autre widget de simplement utiliser ci-dessous

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

Qt :: Tool est indicateur important de le faire fonctionner. Je veux dire, ne pas voler le focus.

Widgets n'acceptent pas le focus par défaut, mais probablement vous n'avez pas créé un widget simple? Quelle sous-classe était-il? QMainWindow ou autre chose?

Il est possible que la sous-classes de fenêtre par défaut d'accepter l'accent donc essayer d'appeler explicitement QWidget :: setFocusPolicy avec Qt :: NoFocus avant d'appeler QWidget :: show ().

Aussi, assurez-vous de ne pas appeler QWidget :: activateWindow () sur la fenêtre ou l'un de ses widgets à tout moment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top