QT, Wie das einbetten einer Anwendung in QT widget
In unserem Projekt haben wir drei unabhängige Anwendungen, und wir entwickeln müssen, die eine QT-control-Anwendung, steuert diese drei Anwendungen. Das Hauptfenster wird getrennt nach drei sub-windows - pro Anzeige ein weiteres Anwendung.
Dachte ich, QX11EmbedWidget und QX11EmbedContainer widgets, aber zwei Probleme damit:
- Die QX11Embed* basiert auf dem X11-Protokoll und ich weiß nicht, ob es unterstützt wird, auf nicht-x11-Systemen wie Windows OS.
- Seit QT 5 diese Klassen sind nicht vorhanden, und die QT-Dokumentation nicht erwähnt, warum.
So, ich weiß nicht, ob Sie es oder nicht - ich werde glücklich sein, um eine Antworten.
Darüber hinaus sehe ich, dass die QT 5.1 enthält QWidget::createWindowContainer(); Funktion, die in einigen posts, wie es aussieht, dies sollte der Ersatz für die X11Embed. Kann bitte jemand explian mich mehr, wie kann ich mit dieser Funktion erstellen Sie ein QT-widget, die ausgeführt wird, einer anderen Anwendung (ein Rechner zum Beispiel) im inneren sein?
Den ich gesucht habe viel in Google und finde nicht die Antworten auf meine Qs.
Kann jemand mir bitte helfen? Bin ich auf dem richtigen Weg?
Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn alle drei voneinander unabhängige Anwendungen geschrieben werden, die mit Qt, und Sie haben Ihre Quelle, Sie sollten in der Lage sein, um Sie zu vereinheitlichen, gerade durch die Erziehung von GUI-Objekten 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
Wenn Sie nicht über einen Internetzugang verfügen, um Sie auf diese Weise, was Sie reden, ist wie 3rd-party-Fenster-management. Es ist eine Art, wie das schreiben eines shell, wie Windows Explorer, manipuliert, dem Staat und der Größe der anderen Fenster Anwendungen.
Verwenden Sie ein Programm wie Spy++ oder AutoIt Spy für Windows und ähnliche für andere OS ' s, und lernen Sie die Kennzeichnungen von Ihrem windows-Sie Steuern möchten, wie der Klasse, der Titel des Fensters, etc. Oder starten Sie die exe-Datei selbst in einem
QProcess::startDetached()
Art der Sache.http://qt-project.org/doc/qt-5.1/qtcore/qprocess.html#startDetached
Dann mit dem Betriebssystem-abhängige Aufrufe Kontrolle über den windows -. Die Qt-Bibliothek nicht dieses Zeug gebaut für Dritte windows, nur für diejenigen unter den QApplication, die Sie ins Leben gerufen. Es gibt eine Menge Beispiele dafür, Dinge zu tun, wie dies von AutoHotKey oder AHK. Es ist eine Skriptsprache, die für die Automatisierung eine Menge Dinge, die in der windows-Umgebung, und es ist der port für Mac als auch (obwohl ich habe nicht versucht, den mac-port selbst).
Also am Ende, die Sie suchen, auf der Suche nach Ihrem Fenster, wahrscheinlich mit einem Aufruf wie diesem:
Dann manipulieren die position und Zustand der Fenster, etwa so:
Können Sie auch ziehen Sie widgets auf der Oberseite der Fenster, die Sie Steuern, wenn Sie Ihre Fenster-flags korrekt für windows, die Sie Bearbeiten.
transparente QLabel mit einer pixmap
Kann nicht QSystemTrayIcon, um korrekt zu arbeiten mit Aktivierungs-Grund
Einige Fallstricke, die kommen in Windows, wenn all dies tun, ist, herauszufinden, die Eigenheiten der Windows-Benutzeroberfläche, wenn Sie die Anzeige der Skalierung anders aus, was Sie erwarten, und wenn Sie wollen, zu spielen schön mit der Task-Leiste, und mit all den modal windows für Ihre Programme, die Sie Bearbeiten.
Also insgesamt, es ist machbar. Qt wird ein schönes interface für die Ausführung dieser Befehle, aber am Ende sind Sie auf der Suche eine Menge Arbeit und Debuggen, um es in eine schöne, zuverlässige, Fenster-manager.
Hoffe, das hilft.
createWindowContainer
vor. Wie es aussieht ist es eine Verknüpfung zu aktualisieren, jede Art vonQWindow
, wie der scenegraph oder die Qt Quick oder ein OpenGL-Fenster, um eine komplette Fensterdekoration, die Werke mit anderen QWidgets. Sieht es nicht aus, es kann einfach jede HWND id... blog.qt.digia.com/blog/2013/02/19/...throw new NotImplementedException();
in es jetzt. Es kann ein guter Anfang sein, Beispiele zu finden, zu tun, dieC#
route.Habe ich nie selber ausprobiert, aber von den docs in Qt 5.1 würde ich versuchen QWindow::fromId(WId-id), die Ihnen eine QWindow, die sollte bündig mit createWindowContainer:
Aber keine Garantie. 🙂