2010-12-14 77 views
0

J'ai besoin d'afficher une fenêtre DirectX en plein écran à partir d'une application Qt.Evénements clavier Qt avec DirectX fullscreen

Bien que DirectX ne soit plus supporté directement par Qt, cela devrait être assez simple - il suffit de remplacer QWidget, de fournir votre propre paintEvent() et de définir un attribut WA_PaintOnScreen.

Mais lorsque l'application est en plein écran, DirectX saisit toutes les entrées de la souris et du clavier - la seule façon de sortir de l'application est donc ctrl-alt-del.

ps. Même si j'écrivais des gestionnaires de clavier DirectX, je devrais encore trouver un moyen de créer l'événement Qkeypress correct pour passer à Qt.

Quelqu'un at-il fait cela? Ou existe-t-il un moyen simple d'indiquer à DirectX de ne pas saisir le clavier?

Répondre

1

A ma connaissance Direct3D n'obtient pas le clavier. Votre problème provient probablement du fait que Direct3D en plein écran est une bête assez différente. Des choses comme GDI (que Qt peut très bien utiliser pour faire le rendu) ne fonctionnent pas par défaut, le run-time croise beaucoup de bits d'information. Cette information, alors, ne parvient jamais à atteindre Qt. Les options que vous avez sont de ré-implémenter Qt pour rendre en utilisant Direct3D (projet Lighthouse?) Ou pour utiliser un pseudo plein écran. Cela est généralement fait en créant une fenêtre qui a une zone client de la même taille que l'écran et en le positionnant correctement.

Ce dernier serait probablement la solution ...

+0

Oui, je n'ai besoin que de D3D pour la partie plein écran. Je dessine donc directement sur la surface D3D à partir de Qt. Les touches de raccourci qui font partie du pilote D3D fonctionnent toujours - il semble donc que je doive écrire une sorte de hook D3D keyb. Cela signifie également que dessiner un menu Qt sur la surface D3D est probablement très difficile. –

0

simple Il y a eu une tentative d'obtenir une sorte de D3DWidget de chose dans Qt ou quelque chose comme 04.03 à 04.05, mais il n'a jamais été stabilisé ou approuvé et plus tard même enlevé. Peut-être en effet phare est une option (avec une quantité de travail de taille moyenne, essentiellement des liens OS/DX trucs à des trucs Qt) ou vous pouvez jeter un oeil à l'ancien code direct3D dans les anciennes branches Qt. Je ne l'ai jamais utilisé, et il n'est probablement pas destiné à être utilisé avec des versions récentes de Qt, mais c'est mieux que rien.

+0

Le moteur de rendu DirectX a été supprimé (supposément) parce qu'il voulait une plateforme multiplateforme et l'avenir de Qt est vraiment sur les téléphones portables. –

+0

@Martin: en effet, j'ai lu ça entre les lignes aussi ... OpenGL est bien intégré, c'est un plus! – rubenvb