Si les trois applications indépendantes sont écrites avec Qt, et que vous avez leur source, vous devriez être capable de les unifier à travers le parentage des objets GUI dans Qt.
http://qt-project.org/doc/qt-4.8/objecttrees.html
http://qt-project.org/doc/qt-4.8/widgets-and-layouts.html
http://qt-project.org/doc/qt-4.8/mainwindows-mdi.html
Si vous n'avez pas accès à eux de cette façon, ce que vous parlez est comme la gestion des fenêtres 3ème partie. C'est un peu comme écrire un shell, comme Windows Explorer, qui manipule l'état et la taille des autres applications de fenêtre. Utilisez un programme comme Spy ++ ou AutoIt Spy pour Windows et similaire pour les autres systèmes d'exploitation, et apprenez les marques d'identification de vos fenêtres que vous voulez contrôler, comme la classe, le titre de la fenêtre, etc.Ou vous pouvez lancer l'exe vous-même dans un QProcess::startDetached()
sorte de chose.
http://qt-project.org/doc/qt-5.1/qtcore/qprocess.html#startDetached
Ensuite, en utilisant les appels dépendants OS contrôlent les fenêtres. La bibliothèque Qt n'a pas ce truc intégré pour les fenêtres tierces, seulement pour celles sous QApplication que vous avez lancé. Il y a beaucoup d'exemples de faire des choses comme ça par AutoHotKey, ou AHK. C'est un langage de script qui est fait pour automatiser beaucoup de choses dans l'environnement Windows, et il y a également un port pour Mac (même si je n'ai pas essayé le port mac moi-même).
Donc à la fin que vous cherchez à trouver votre fenêtre probablement avec un appel comme celui-ci:
#include <windows.h>
HWND hwnd_1 = ::FindWindow("Window_Class", "Window Name");
LONG retVal = GetWindowLongA(hwnd_1, GWL_STYLE); // to query the state of the window
manipuler ensuite la position et l'état de la fenêtre comme ceci:
::MoveWindow(hwnd_1, x, y, width, height, TRUE);
::ShowWindow(hwnd_1, SW_SHOWMAXIMIZED);
Vous pouvez même dessiner des widgets au-dessus des fenêtres que vous contrôlez si vous définissez vos indicateurs de fenêtre correctement pour les fenêtres que vous manipulez.
transparent QLabel with a pixmap
Cannot get QSystemTrayIcon to work correctly with activation reason
Quelques pièges qui se présentent sous Windows lorsque vous faites tout cela, est de trouver les bizarreries de l'interface utilisateur de Windows quand ils sélectionnez l'affichage d'échelle différent de ce que vous attendez, et si vous voulez jouer bien avec la barre des tâches, et gérer toutes les fenêtres modales de vos programmes que vous manipulez.
Donc globalement, c'est faisable. Qt fera une belle interface pour l'exécution de ces commandes, mais à la fin vous aurez besoin de beaucoup de travail et de débogage pour l'obtenir dans un gestionnaire de fenêtres beau et fiable.
Espérons que ça aide.
Tout d'abord merci de me répondre, j'ai commencé à penser que personne ne pouvait me répondre. Je n'ai pas accès au code source. 2 Qs: que savez-vous de QWidget :: createWindowContainer(); fonction, peut-il faire tout le travail? 2. Si votre solution nécessite beaucoup de portage sur Windows - peut-être que cela ne vaut pas la peine - et la solution en court-circuit est d'écrire l'application dans .NET pour Windows et dans Je ne sais pas pour Linux-Ubuntu? – RRR
Je n'ai pas utilisé 'createWindowContainer' avant. Il semble que ce soit un raccourci pour mettre à jour n'importe quel type de 'QWindow', comme le SceneGraph ou le Qt Quick ou une fenêtre OpenGL pour avoir une décoration de fenêtre complète qui fonctionne avec d'autres QWidgets. Il ne semble pas que cela puisse prendre n'importe quel ID HWND ... http://blog.qt.digia.com/blog/2013/02/19/introducing-qwidgetcreatewindowcontainer/ – phyatt
La manipulation des fenêtres n'est pas trop difficile. Cela demande de la recherche et du travail, mais être en train de les manipuler sous Windows ne devrait pas prendre plus de quelques heures. Je ne l'ai pas encore fait sous Linux et OSX, mais il faudrait juste que les bons appels soient mis en place. – phyatt