2010-06-22 5 views
2

Je travaille sur un plugin pour une application Cocoa, et pour utiliser le code cpp existant, nous avons décidé d'épouser le plugin Cocoa avec notre existant Projet Qt via Objective-C++, qui a beaucoup appris à la volée mais avance bien.Mélanger Qt et Cocoa via QMacNativeWidget - J'ai des problèmes pour afficher un QDialog sur un NSWindow

De toute façon, je suis perplexe par mon problème actuel. La conception de ce plugin est telle que l'application nous donne un NSWindow avec deux NSViews à l'intérieur. Nous plaçons un QMacNativeWidget dans l'une de ces deux vues, et tout fonctionne correctement. Le problème que je rencontre est que lorsque j'essaie de créer un nouveau QDialog() à partir de notre plugin, le QDialog est toujours derrière le NSWindow contenant le plugin.

Que je lève() ou non le nouveau QDialog, le NSWindow est toujours à l'avant même s'il perd immédiatement le focus du clavier sur QDialog. Si je déplace le NSWindow je peux voir le QDialog derrière lui, mais même quand je clique sur sa barre de titre et le déplace autour, il est toujours derrière le NSWindow. Je me demandais juste si quelqu'un avait eu des problèmes similaires en mélangeant NSWindows et QDialogs, et s'il y avait une autre solution que d'envelopper mon QDialog dans un autre QMacNativeWidget et de le placer dans un autre NSWindow, que je préférerais ne pas avoir fais parce que j'ai beaucoup de dialogues.

Merci.

Répondre

1

Je fais quelque chose de similaire (Qt comme un plugin à une application native Cocoa). Je construis mon QDialog modal avec un parent nul, et il se comporte comme modal d'application et reste au top. Votre problème est-il spécifique à un QMacNativeWidget non-modal et à un QDialog modal? Je ne suis pas sûr d'avoir ce scénario exact. Définissez-vous le QDialog pour avoir un parent nul?

Pour contourner ce problème, vous pouvez essayer de modifier les drapeaux de fenêtre pour appliquer de plus haut comportement:

// Qt::Tool to stay on top 
QDialog* d= new QDialog(0, Qt::Tool); 
// And stop the tool window from disappearing on hide 
d->setAttribute(Qt::WA_MacAlwaysShowToolWindow); 

Voir http://doc.qt.nokia.com/latest/qt.html#WindowType-enum

Alternativement, vous pouvez essayer NSWindow setLevel, donné une QDialog 'd' (I saute un peu de coulée ici):

[[d->winId() window] setLevel:some_level] 
Questions connexes