Qt5. Betten Sie das QWidget-Objekt in QML ein
Ich bin mit Qt5 beta und versucht zum einbetten einer QWidget-basierte Objekt in QML. Das Ziel ist die Verwendung von QML, so viel wie möglich, und verwenden Sie nur QWidget-Objekte, wo QML nicht tut, was ich brauche. Ich fand einen link, der erklärt, wie Sie dies tun, für Qt4.7, aber ich habe nicht gefunden, alle Informationen, die erklären, wie man dies in Qt5.
http://doc.qt.digia.com/4.7/declarative-cppextensions-qwidgets.html
Dasselbe Beispiel ist auch in der Qt5 examples Ordner unter:
Beispiele\qtquick1\deklarative\cppextensions\qwidgets
Leider, dieses Beispiel verwendet QtQuick 1, statt QtQuick 2 und ich möchte die neuen features von Qt5. Eigentlich möchte ich einbetten qwt-widgets, aber als ersten Schritt würde ich gerne einbetten einfaches QWidget-basierte Objekt.
Kann jemand mir helfen, die beispielsweise das arbeiten unter Qt5 /QtQuick 2 ?
InformationsquelleAutor der Frage eatyourgreens | 2012-10-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Qt Quick 2 verwendet eine scene graph für die effiziente rendering auf der GPU. Leider ist dies macht es unmöglich, einbetten, klassische Elemente in die Szene. Das alte Konzept einbetten, solche widgets mit Hilfe von
QGraphicsProxyWidget
funktioniert nur mit Qt Quick 1, da es intern verwendet, eineQGraphicsView
für alle, die schweres heben undQGraphicsProxyWidget
verwendet werden soll.Ab jetzt gibt es keine Pläne ermöglichen die Einbettung von klassischen QWidgets in den Szene-Graphen, die ich kenne. Ich denke, das ist eher unwahrscheinlich, dass zu ändern, weil die Konzepte von QPainter, der Malerei Rahmen für die classic widgets und die neue scene graph nicht gut spielen mit einander.
Gibt es einige Bemühungen um die Entwicklung neuer widgets-sets speziell für die Bedürfnisse von QML, aber keiner von Ihnen sind so leistungsfähig und ausgereift wie die klassischen widgets. Die meisten prominenten sind die QML Quick-Controlsgebündelt mit Qt seit version 5.1.
Wenn Sie wirklich abhängen QWT mein Rat wäre zu halten mit Qt Quick 1.1 für jetzt. Es ist immer noch gebündelt mit Qt 5, die wahrscheinlich für Fälle wie deiner. So werden Sie nicht nutzen, das neue scene graph, obwohl.
InformationsquelleAutor der Antwort sebasgo
Was getan werden könnte, ist das Rendern der widgets zu einem Bild und hochladen als textur.Für die Interaktion muss jemand nach vorne Ereignisse wie Mausklick oder keyPressed aus dem sceneGraph, übersetzen Sie widget-Koordinaten, pass auf, Rendern und hochladen der textur wieder. Nur eine Idee 🙂
InformationsquelleAutor der Antwort Sebastian
Die empfohlene Vorgehensweise ist zu bleiben mit einem QWidget-basierte Anwendung einbetten und die QML Teile, die mit QWidget::createWindowContainer.
InformationsquelleAutor der Antwort Julian
Können Sie einbetten von QWidget zu QML mithilfe QQuickPaintedItem Klasse:
http://doc.qt.io/qt-5/qquickpainteditem.html
Qt5 hat, ein Beispiel:
http://doc.qt.io/qt-5/qtquick-customitems-painteditem-example.html
Sollten Sie implementieren eine inhärente von QQuickPaintedItem mit eigenem widget-Attribut, die Sie einbetten möchten. Geben paint-Methode, dass Sie nur das Rendern der QtWidget und eine Maus und anderen event-übertragung vom Erben des QQuickPaintedItem einbetten QtWidget.
Gibt es auch QSG (Qt scene graph API), aber meine Erfahrungen mit diesem Ding war nicht glatt. Ich glaube, dass die Ahnung, in multithreading (Durchführung rendering in den anderen thread (nicht die Qt-GUI-thread, allerdings auf Windows-das ist nicht wahr und alles ist erledigt im Haupt-GUI-thread).
Habe ich umgesetzt Einbettung von QCustomPlot, hier der link: github.com/mosolovsa/qmlplot
InformationsquelleAutor der Antwort Mosolov Sergey
Weiter zu Julien ' s Antwort - eine einfache Möglichkeit, dies zu erreichen, ist die Verwendung QQuickWidget zur Anzeige der QML Szene, und fügen Sie eine regelmäßige QWidget als Kind der QQuickWidget. Sie können auch hinzufügen einer einfachen intermediate QObject zu verankern, die QWidget auf ein Element in der Szene.
E. g.:
In main.qml:
widgetanchor.h:
In main.cpp:
Die Dokumentation besagt, dass mit QQuickWidget hat Vorteile gegenüber QQuickView und QWidget::createWindowContainer, wie keine Beschränkungen auf die Stapelreihenfolge, hat aber eine "geringfügige performance-hit".
Hoffe, das hilft.
InformationsquelleAutor der Antwort NickD2039
Hier erklärt, wie man hinzufügen QComboBox auf QML basierte layout. Denke, dass wird gutes Beispiel für Ihren Fall. (In Qt 5.9 implementiert native ComboBox QML-Kontrolle).
InformationsquelleAutor der Antwort stanislav888