Se tutte e tre le applicazioni indipendenti sono state scritte con Qt e si ha la loro origine, si dovrebbe essere in grado di unificarle solo attraverso la genitorialità degli oggetti della GUI in 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
Se non si dispone di accesso ad essi in quel modo, che cosa si sta parlando è come terzo partito gestione delle finestre. È come scrivere una shell, come Windows Explorer, che manipola lo stato e le dimensioni di altre applicazioni della finestra.
Utilizzare un programma come Spy ++ o AutoIt Spy per Windows e simili per altri sistemi operativi e imparare i segni di identificazione delle finestre che si desidera controllare, come la classe, il titolo della finestra, ecc.Oppure puoi lanciare l'exe te stesso in una sorta di cosa QProcess::startDetached()
.
http://qt-project.org/doc/qt-5.1/qtcore/qprocess.html#startDetached
Quindi, utilizzando il sistema operativo chiamate dipendenti controllano le finestre. La libreria Qt non ha questa roba incorporata per le finestre di terze parti, solo per quelle sotto la QApplicazione che hai lanciato. Ci sono molti esempi di come fare AutoHotKey o AHK. È un linguaggio di scripting che è stato creato per automatizzare molte cose nell'ambiente Windows, e c'è anche una porta per Mac (anche se non ho provato personalmente la porta mac).
Così alla fine si sta cercando di trovare la finestra probabilmente con una chiamata del genere:
#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
quindi modificare la posizione e lo stato della finestra in questo modo:
::MoveWindow(hwnd_1, x, y, width, height, TRUE);
::ShowWindow(hwnd_1, SW_SHOWMAXIMIZED);
Puoi anche disegnare i widget in cima alle finestre che si stanno controllando se si impostano i flag delle finestre correttamente per le finestre che si stanno manipolando.
transparent QLabel with a pixmap
Cannot get QSystemTrayIcon to work correctly with activation reason
alcuni grattacapi che sorgono in Windows quando si fa tutto questo, è scoprire le peculiarità della interfaccia utente di Windows quando impostare la visualizzazione di scala diverso da quello che ci si aspetta, e se vuoi giocare bene con la barra delle applicazioni e gestire tutte le finestre modali dei programmi che stai manipolando.
Quindi, nel complesso, è fattibile. Qt creerà una bella interfaccia per l'esecuzione di questi comandi, ma alla fine stai cercando un sacco di lavoro e debug per ottenere un window manager bello, affidabile.
Spero che questo aiuti.
Prima di tutto grazie, rispondimi, ho iniziato a pensare che nessuno potesse rispondermi. Non ho accesso al codice sorgente. 2 Q: cosa sai di QWidget :: createWindowContainer(); funzione, può fare tutto il lavoro? 2. se la tua soluzione richiede molto il porting su windows - forse non vale la pena - la soluzione in cortocircuito è scrivere l'app in .NET per Windows e in I do not for Linux-Ubuntu? – RRR
Non ho usato 'createWindowContainer' prima. Sembra che si tratti di una scorciatoia per l'aggiornamento di qualsiasi tipo di 'QWindow', come la scenegraph o la finestra Qt Quick o OpenGL per avere una decorazione di finestre completa che funzioni con altri QWidgets. Non sembra che possa prendere qualsiasi ID HWND ... http://blog.qt.digia.com/blog/2013/02/19/introducing-qwidgetcreatewindowcontainer/ – phyatt
La gestione delle finestre non è troppo difficile. Richiede ricerca e lavoro, ma essere in piedi e manipolarli in Windows non dovrebbe richiedere più di qualche ora. Non l'ho ancora fatto in Linux e OSX, ma dovrebbe essere solo questione di ottenere le chiamate giuste. – phyatt