mafulechka
mafulechka2. September 2019 05:04

Einführung von Qt Quick 3D: Eine High-Level-3D-API für Qt Quick

Die Entwickler haben untersucht, wie 3D und Qt Quick so tief wie möglich integriert werden können, was zu einem neuen Projekt namens Qt Quick 3D führte, das eine High-Level-API zum Erstellen von 3D-Inhalten für Benutzeroberflächen von Qt Quick bereitstellt. Anstatt eine externe Engine zu verwenden, die zu Timing-Problemen bei Animationen und mehreren Abstraktionsebenen führen kann, stellt Qt Company Erweiterungen für Qt Quick Scenegraph für 3D-Inhalte und einen Renderer für diese erweiterten Szenendiagrammknoten bereit.

Bedeutet dies, dass sie eine weitere 3D-Lösung für Qt geschrieben haben? Nicht wirklich, denn die räumliche Rendering-Engine ist vom Qt 3D Studio-Renderer abgeleitet. Dieser Renderer wurde portiert, um Qt für die Plattformabstraktion zu verwenden, und wurde umgestaltet, um dem Codierungsstil des Qt-Projekts zu entsprechen.



„San Miguel“-Testszene, die in Qt Quick 3D ausgeführt wird.

Was sind die Ziele von Qt Company? Warum eine andere 3D-Lösung?

Einheitliche Grafikgeschichte

Das wichtigste Ziel ist die Vereinheitlichung der grafischen Historie. Qt Company bietet derzeit zwei End-to-End-Lösungen zur Erstellung flexibler Benutzeroberflächen an, jede mit einem eigenen Toolkit. Eine dieser Lösungen ist Qt Quick für 2D, die andere ist Qt 3D Studio für 3D. Wenn Sie sich darauf beschränken, das eine oder andere zu verwenden, funktioniert es normalerweise ziemlich gut. Entwickler haben jedoch festgestellt, dass Benutzer sie letztendlich mischen und anpassen müssen, was viele Fallstricke aufzeigt, sowohl in der Laufzeitleistung als auch in der Entwickler-/Designererfahrung.

Aus Gründen der Einfachheit zielt Qt Company daher darauf ab, eine Laufzeit (Qt Quick), einen allgemeinen Szenengraphen (Qt Quick Scenegraph) und ein Designtool (Qt Design Studio) zu erstellen. Es sollten keine Kompromisse bei Funktionen, Leistung oder Entwickler-/Designererfahrung gemacht werden. Daher ist es nicht erforderlich, die Entwicklung weiter in weitere Produkte aufzuteilen, und somit können sie mehr Funktionen und Fehlerbehebungen schneller bereitstellen.

Intuitive und einfach zu bedienende API

Das nächste Ziel von Qt Quick 3D ist die Bereitstellung einer API zur Definition von 3D-Inhalten. Eine API, die zugänglich und entwicklerfreundlich ist, ohne die feineren Details der modernen Grafikpipeline verstehen zu müssen. Schließlich müssen die meisten Benutzer keine benutzerdefinierten 3D-Grafik-Renderer für jede ihrer Anwendungen erstellen, sondern lediglich einige 3D-Inhalte anzeigen, oft neben 2D. Daher wird Qt Quick 3D unter diesem Gesichtspunkt entwickelt.

Allerdings wird die Rendering-API im Laufe der Zeit immer mehr offengelegt, was die fortgeschritteneren Anwendungsfälle ermöglicht, die von Power-Usern benötigt werden.

Zum Zeitpunkt der Erstellung dieses Artikels stellt die Qt Company nur eine QML-API bereit, aber in Zukunft möchten sie auch eine offene C++-API bereitstellen.

Einheitliches Toolkit für Qt Quick

Qt Quick 3D soll der Nachfolger von Qt 3D Studio werden. Aktuell wird Qt 3D Studio noch weiterentwickelt, langfristig aber durch Qt Quick und Qt Design Studio abgelöst.

Die Entwickler beabsichtigen, die besten Teile von Qt 3D Studio zu nehmen und sie auf Qt Quick und Qt Design Studio zu portieren. Anstatt also ein separates Tool für Qt Quick oder 3D zu benötigen, können Sie beides von Qt Design Studio erhalten. Wir arbeiten jetzt an den Details und Qt Company hofft, bald eine Vorschau zu erhalten.

Bestehende Benutzer von Qt 3D Studio arbeiten an einem Portierungstool, um Projekte in Qt Quick 3D zu konvertieren. Dazu später mehr.

Erste Anlageklasse der Verarbeitungspipeline

Bei der Arbeit mit 3D-Szenen wird der Zustand des Asset-Systems wichtiger, da jetzt mehr Arten von Assets verwendet werden und diese im Allgemeinen viel größer sind. Daher haben die Entwickler bei der Entwicklung von Qt Quick 3D versucht herauszufinden, wie Sie es so einfach wie möglich machen können, Ihre Inhalte zu importieren und in effiziente Laufzeitformate für Qt Quick zu konvertieren.

Beispielsweise möchten Sie zur Entwurfszeit angeben, welche Assets verwendet werden sollen, basierend auf dem, was Ihre Asset-Erstellungstools generieren (z. B. FBX-Dateien von Maya für 3D-Modelle oder PSD-Dateien von Photoshop für Texturen), aber zur Laufzeit müssen Sie dies nicht tun eine Engine für diese Formate verwenden möchten. Stattdessen sollten Sie die Assets in ein effizientes Laufzeitformat konvertieren und jedes Mal aktualisieren, wenn sich die ursprünglichen Assets ändern. Die Qt Company möchte, dass dies so automatisiert wie möglich ist, und möchte es daher in das Qt-Build-System und -Toolkit einbauen.

Plattformübergreifende Leistung und Kompatibilität

Ein weiteres Ziel ist die Unterstützung mehrerer nativer Grafik-APIs mithilfe der neuen Rendering-Hardware-Schnittstelle, die Qt hinzugefügt wird. Derzeit unterstützt Qt Quick 3D nur das Rendern mit OpenGL, ebenso wie viele andere Komponenten in Qt. Qt 6 wird jedoch QtRHI als Grafikabstraktion verwenden und das Rendering über Vulkan, Metal und Direct3D zusätzlich zu OpenGL unterstützen können.

Was ist Qt Quick 3D?

Qt Quick 3D ist kein Ersatz für Qt 3D, sondern eine Erweiterung der Funktionalität von Qt Quick zum Rendern von 3D-Inhalten mithilfe einer High-Level-API.

So sieht ein sehr einfaches Projekt mit einigen hilfreichen Hinweisen aus:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick3D 1.0

Window {
  id: window
  visible: true
  width: 1280
  height: 720

  // Viewport for 3D content
  View3D {
    id: view

    anchors.fill: parent
    // Scene to view
    Node {
      id: scene

      Light {

        id: directionalLight

      }

      Camera {
        id: camera
        // It's important that your camera is not inside 
        // your model so move it back along the z axis
        // The Camera is implicitly facing up the z axis,
        // so we should be looking towards (0, 0, 0)
        z: -600
      }

      Model {
        id: cubeModel
        // #Cube is one of the "built-in" primitive meshes
        // Other Options are:
        // #Cone, #Sphere, #Cylinder, #Rectangle
        source: "#Cube"

        // When using a Model, it is not enough to have a 
        // mesh source (ie "#Cube")
        // You also need to define what material to shade
        // the mesh with. A Model can be built up of 
        // multiple sub-meshes, so each mesh needs its own
        // material. Materials are defined in an array, 
        // and order reflects which mesh to shade

        // All of the default primitive meshes contain one
        // sub-mesh, so you only need 1 material.

        materials: [

          DefaultMaterial {

            // We are using the DefaultMaterial which 
            // dynamically generates a shader based on what
            // properties are set. This means you don't 
            // need to write any shader code yourself.  
            // In this case we just want the cube to have
            // a red diffuse color.
            id: cubeMaterial
            diffuseColor: "red"
          }
        ]
      }
    }
  }
}

Die Idee ist, dass das Definieren von 3D-Inhalten so einfach sein sollte wie das Definieren von 2D-Inhalten. Es gibt ein paar zusätzliche Dinge, die Sie benötigen, wie z. B. die Beleuchtungs-, Kamera- und Materialkonzepte, aber das sind alles Szenenkonzepte auf hoher Ebene, keine Implementierungsdetails der Grafikpipeline.

Diese einfache API ist natürlich billiger. Während es möglich ist, die Materialien und den Inhalt der Szene anzupassen, ist es nicht möglich, das Rendern der Szene vollständig anzupassen, im Gegensatz zu Qt 3D mit einem benutzerdefinierten Rahmendiagramm. Stattdessen gibt es vorerst einen festen Front-Renderer (Renderer), in dem Sie Szeneneigenschaften und deren Anzeige definieren können. Dies ähnelt anderen vorhandenen Engines, die normalerweise mehrere mögliche Rendering-Pipelines haben, die dann die Logikszene rendern.


Kamera dreht sich um Automodell in Skybox mit Achsen und Gitterlinien (Anmerkung: Stottern von GIF 12 FPS).

Was können Sie mit Qt Quick 3D tun?

Es kann viele Dinge tun, aber sie werden mit den folgenden Szenenprimitiven erstellt:

Knoten

Knoten ist die Basiskomponente für jeden Knoten in einer 3D-Szene. Es stellt eine Transformation (Transformation) im dreidimensionalen Raum dar, ist aber nicht visuell. Es funktioniert ähnlich wie der Elementtyp in Qt Quick.

Kamera

Die Kamera stellt dar, wie die Szene auf eine 2D-Oberfläche projiziert wird. Die Kamera hat eine Position im 3D-Raum (da sie eine Unterklasse von Node ist) und eine Projektion. Zum Rendern einer Szene benötigen Sie mindestens eine Kamera.

Licht (Welt)

Die Lichtkomponente definiert die Lichtquelle in der Szene, zumindest für Materialien, die Beleuchtung verwenden. Im Moment gibt es 3 Arten von Lichtquellen: Directional (direktional (Standard)), Point (Punkt) und Area (die Fläche abdeckend).

Modell (Modell)

Die Model-Komponente ist die einzige visuelle Komponente in der Szene. Es ist eine Kombination aus Geometrie (aus Mesh) und einem oder mehreren Materialien.

Die source-Eigenschaft der Mesh-Komponente erwartet eine .mesh -Datei, das Laufzeitformat, das von Qt Quick 3D verwendet wird. Um Mesh-Dateien (Mesh) zu erhalten, müssen Sie 3D-Modelle mit dem Asset-Import-Tool (Asset-Import-Tool) konvertieren. Es gibt auch mehrere eingebaute Primitive. Sie können verwendet werden, indem die source-Eigenschaft auf die folgenden Werte gesetzt wird: #Cube, #Cylinder, #Sphere, #Cone oder #Rectangle.

Außerdem wurde eine programmgesteuerte Methode zum Definieren Ihrer eigenen Geometrie zur Laufzeit hinzugefügt, die jedoch noch nicht in der Vorschau verfügbar ist.

Bevor ein Modell gerendert werden kann, muss es auch ein Material haben. Dies bestimmt, wie das Netz schattiert wird.

Standardmaterialien und benutzerdefinierte Materialien

Die DefaultMaterial-Komponente ist ein benutzerfreundliches integriertes Material. Alles, was Sie tun müssen, ist dieses Material zu erstellen, die Eigenschaften festzulegen, die Sie definieren möchten, und der gesamte erforderliche Shader-Code wird automatisch unter der Haube generiert. Alle anderen Eigenschaften, die Sie auf der Bühne einstellen, werden ebenfalls berücksichtigt. Es besteht keine Notwendigkeit, Grafik-Shader-Code selbst zu schreiben (wie einen Vertex- oder Fragment-Shader).

Es ist auch möglich, sogenannte CustomMaterials zu definieren, bei denen Sie Ihren eigenen Shader-Code angeben. Qt Company bietet auch eine Bibliothek mit vordefinierten benutzerdefinierten Materialien, die Sie ausprobieren können, indem Sie einfach Folgendes zu Ihrem QML-Import hinzufügen:
Importieren Sie QtQuick3D.MaterialLibrary 1.0

Textur

Die Texturkomponente repräsentiert eine Textur in einer 3D-Szene und wie sie in einem Netz erscheint. Die Texturquelle kann eine Bilddatei oder eine QML-Komponente sein.

Beispiel verfügbarer Funktionen

3D-Ansichten in Qt Quick

Um 3D-Inhalte in Qt Quick anzuzeigen, müssen Sie sie an einer 2D-Oberfläche ausrichten. Dazu wird die Komponente View3D verwendet. View3D ist die einzige QQuickItem-basierte Komponente in der gesamten API. Sie können eine Szene als untergeordnetes Element von View3D definieren oder auf eine vorhandene Szene verweisen, indem Sie die Szeneneigenschaft auf den Stammknoten (Node) der Szene festlegen, die Sie rendern möchten.

Wenn Sie mehrere Kameras haben, können Sie auch angeben, welche Kamera Sie zum Rendern der Szene verwenden möchten. Standardmäßig wird nur die erste in der Szene definierte aktive Kamera verwendet.

Es ist auch erwähnenswert, dass View3D-Elemente nicht außerhalb von Bildschirmtexturen gerendert werden müssen, bevor sie gerendert werden. Sie können einen der 4 folgenden Rendermodi einstellen, um zu bestimmen, wann 3D-Inhalte angezeigt werden:

eines. Textur: View3D ist ein Qt Quick-Texturanbieter und ordnet Inhalte über FBO einer Textur zu.

2. Unterlage: Das View3D wird gerendert, bevor der Qt Quick 2D-Inhalt direkt im Fenster angezeigt wird (3D ist immer unter 2D).

3. Overlay: View3D wird gerendert, nachdem Qt Quick 2D-Inhalte direkt in ein Fenster gerendert wurden (3D ist immer größer als 2D).

vier. RenderNode: View3D wird entsprechend dem Qt Quick 2D-Inhalt gerendert. Dies kann jedoch zu einigen Kuriositäten führen, da Qt Quick 2D den Tiefenpuffer in Qt 5 verwendet.

2D-Ansichten in 3D

Möglicherweise möchten Sie auch Qt Quick-Inhalte in einer 3D-Szene rendern. Zu diesem Zweck können Sie überall dort, wo eine Textur als Eigenschaftswert verwendet wird (z. B. in der Standardeigenschaft diffuseMap-Material), eine Textur mit der Eigenschaft sourceItem verwenden, anstatt einfach die Datei in der Eigenschaft source anzugeben. Auf diese Weise wird der Link zum Qt Quick-Element automatisch gerendert und als Textur verwendet.


Diffuse Farbtexturen, die Würfeln zugeordnet sind, sind animierte Qt Quick 2D-Elemente.

3D-QML-Komponenten

Da Qt Quick 3D auf QML aufbaut, können Sie auch wiederverwendbare Komponenten für 3D erstellen. Wenn Sie beispielsweise ein Automodell erstellen, das aus mehreren Modellen besteht, speichern Sie es einfach in Car.qml. Sie können dann mehrere Instanzen des Autos erstellen, indem Sie es einfach wie jeden anderen QML-Typ wiederverwenden. Dies ist sehr wichtig, da auf diese Weise 2D- und 3D-Szenen mit demselben Komponentenmodell erstellt werden können, anstatt sich mit unterschiedlichen Ansätzen für 2D- und 3D-Szenen auseinandersetzen zu müssen.

Mehrere Ansichten derselben Szene

Da Szenendefinitionen überall in einem Qt Quick-Projekt vorhanden sein können, können sie von mehreren View3Ds referenziert werden. Wenn Sie mehrere Kameras in der Szene hätten, könnten Sie sogar von jeder Kamera zu einem anderen View3D rendern.


4 Ansichten derselben Teekannenszene. Wechselt auch perspektivisch zwischen 3 Kameras.

Schatten

Jede Light-Komponente kann festlegen, dass sie Schatten wirft. Wenn aktiviert, werden Schatten automatisch auf die Bühne gezeichnet. Je nachdem, was Sie tun, kann das Rendern von Schatten ziemlich teuer sein, sodass Sie steuern können, welche Modellkomponenten Schatten werfen, indem Sie zusätzliche Eigenschaften für das Modell festlegen.

Bildbasierte Beleuchtung

Zusätzlich zu den standardmäßigen Lichtkomponenten können Sie Ihre Szene beleuchten, indem Sie eine HDRI-Karte definieren. Diese Textur kann entweder für das gesamte View3D in der Eigenschaft SceneEnvironment oder für einzelne Materialien eingestellt werden.

Animationen

Animationen in Qt Quick 3D verwenden dasselbe Animationssystem wie Qt Quick. Sie können jede Eigenschaft an einen Animator binden und er wird wie erwartet animiert und aktualisiert. Mit dem Modul QtQuickTimeline ist es auch möglich Keyframe-basierte Animationen zu verwenden.

Wie das Komponentenmodell ist dies ein weiterer wichtiger Schritt, um die Lücke zwischen 2D- und 3D-Szenen zu schließen, da es keine separaten, potenziell widersprüchlichen Animationssysteme verwendet.

Derzeit gibt es keine Unterstützung für manipulierte Animationen, dies ist jedoch für die Zukunft geplant.

Wie probiere ich Qt Quick 3D aus?

Es ist beabsichtigt, Qt Quick 3D als technische Vorschau mit der Veröffentlichung von Qt 5.14 zu veröffentlichen. Inzwischen ist es jetzt gegen Qt 5.12 und höher verwendbar.

Um den Code zu erhalten, müssen Sie nur das QtQuick3D-Modul erstellen, das Sie hier finden:
https://git.qt.io/annichol/qtquick3d

Was ist mit Werkzeugen?

Das Ziel ist es, alles zu tun, was zum Einrichten einer 3D-Szene über Qt Design Studio erforderlich ist. Das bedeutet, dass Sie die Szene visuell markieren, 3D-Assets wie Netze, Materialien und Texturen importieren und diese Assets in effiziente Laufzeitformate konvertieren können, die von der Engine verwendet werden.


Demonstration der frühen Integration von Qt Design Studio für Qt Quick 3D.

Importieren Sie 3D-Szenen in QML-Komponenten

Qt Quick 3D kann auch verwendet werden, indem QML-Code von Hand geschrieben wird. Daher gibt es auch mehrere eigenständige Dienstprogramme zum Konvertieren von Assets. Früher war ein solches Werkzeug ein Balsam-Vorbereitungswerkzeug. Jetzt können Sie ein Asset von einem 3D-Asset-Erstellungstool wie Blender, Maya oder 3DS Max an dieses Dienstprogramm übergeben, und es generiert eine QML-Komponente, die die Szene sowie alle verwendeten Texturen, Netze und Materialien darstellt. Dieses Tool unterstützt derzeit das Erstellen von Szenen aus den folgenden Formaten:
• FBX
• Collada (dae)
• OBJ
• Mixer (Mischung)
• GLTF2

Um die Datei myTestScene.fbx zu konvertieren, müssen Sie Folgendes ausführen:

./balsam -o ~/exportDirectory myTestScene.fbx

Dadurch wird eine Datei mit dem Namen MyTestScene.qml zusammen mit allen erforderlichen Assets erstellt. Dann können Sie es einfach wie jede andere Komponente in Ihrer Szene verwenden:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick3D 1.0

Window {
 width: 1920
 height: 1080
 visible: true
 color: "black"

 Node {
   id: sceneRoot
   Light { 
   }
   Camera {
   z: -100
   }
   MyTestScene {
   }
 }

 View3D {
   anchors.fill: parent
   scene: sceneRoot
 }
}

Qt Company arbeitet daran, die von diesem Tool generierten Assets zu verbessern, daher werden in den kommenden Monaten Verbesserungen erwartet.

Konvertieren von Qt 3D Studio-Projekten

Neben der Möglichkeit, 3D-QML-Komponenten aus 3D-Asset-Erstellungstools zu generieren, wurde auch ein Plugin für das Asset-Import-Tool erstellt, um vorhandene Qt 3D Studio-Projekte zu konvertieren. Wenn Sie Qt 3D Studio bereits verwendet haben, werden Sie wissen, dass es XML-Projekte generiert, um die Szene zu definieren. Wenn Sie dem Balsam-Tool ein von Qt 3D Studio generiertes UIP- oder UIA-Projekt übergeben, generiert es auch ein darauf basierendes Qt Quick 3D-Projekt. Beachten Sie jedoch, dass nicht alles konvertiert wird, da sich die von Qt 3D Studio verwendete Laufzeitumgebung von Qt Quick 3D unterscheidet. Es sollte jedoch eine gute Annäherung oder einen Ausgangspunkt für die Konvertierung eines bestehenden Projekts bieten. Qt Company freut sich darauf, die Unterstützung für diesen Pfad weiter zu verbessern, um den Übergang für bestehende Benutzer von Qt 3D Studio zu erleichtern.


Ein Beispiel für eine Qt 3D Studio-Anwendung, die mit dem Qt Quick 3D-Importtool portiert wurde (es ist noch nicht perfekt).

Wie wäre es mit Qt 3D?

Die erste Frage, auf die sich Qt Company freut, lautet: Warum nicht einfach Qt 3D verwenden? Dies ist eine Frage, die sie in den letzten Jahren untersucht haben.

Ein Vorschlag ist, dass Sie Qt Quick ganz einfach auf Qt 3D aufbauen können, wenn Sie 2D und 3D mischen. Qt Company tat sich zusammen und begann mit der Version 2.3 von Qt 3D Studio damit. Die leistungsstarke Qt 3D-API bot eine schöne Abstraktion für die Implementierung einer Rendering-Engine, um das von Qt Quick und Qt 3D Studio erwartete Verhalten nachzubilden. Die Qt-3D-Architektur macht es jedoch schwierig, die erforderliche Leistung auf Einstiegs-Embedded-Hardware zu erzielen. Qt 3D hat aufgrund seiner eigenen begrenzten Laufzeitumgebung auch einen gewissen Overhead und ist eine weitere Abstraktionsebene zwischen Qt Quick und der Grafikhardware. In seiner jetzigen Form ist Qt 3D nicht ideal für die Weiterentwicklung, wenn eine vollständig einheitliche grafische Historie erreicht werden soll und gleichzeitig eine konsistent gute Unterstützung für eine breite Palette von Plattformen und Geräten von Low- bis High-End bereitgestellt werden soll.

Gleichzeitig gab es in Qt 3D Studio bereits eine Rendering-Engine, die genau das tat, was sie tun musste, und eine gute Grundlage für den Aufbau zusätzlicher Funktionen bot. Dies hat den Nachteil, dass sie nicht mehr über die leistungsstarken APIs verfügen, die mit Qt 3D geliefert werden, aber in der Praxis treffen Sie, wenn Sie anfangen, eine Laufzeitumgebung auf Qt 3D aufzubauen, letztendlich Entscheidungen darüber, wie die Dinge funktionieren sollen führt in jedem Fall zu einer eingeschränkten Individualisierbarkeit des Framegraphen (Framegraph). Am Ende war die praktischste Lösung, die vorhandene Rendering-Engine von Qt 3D Studio als Basis zu verwenden und darauf aufzubauen.

Was ist der Plan für die Zukunft?

Diese Version ist nur eine Vorschau dessen, was sein sollte. Es ist geplant, Qt Quick 3D als vollständig unterstütztes Modul mit Qt 5.15 LTS bereitzustellen. Inzwischen arbeitet Qt Company an der Weiterentwicklung von Qt Quick 3D als Tech Preview Release mit Qt 5.14.

Für die Qt 5-Serie sind sie aufgrund von Versprechungen der Binärkompatibilität in der Tiefe der Kombination von 2D und 3D begrenzt. Mit der Veröffentlichung von Qt 6 plant Qt Company, Qt Quick 3D noch tiefer in Qt Quick zu integrieren, um ein noch reibungsloseres Erlebnis zu bieten.

Das Ziel ist, beim Mischen von 2D- und 3D-Inhalten so effizient wie möglich zu sein, ohne zusätzliche Kosten für Benutzer, die überhaupt keine 3D-Inhalte verwenden. Sie werden nichts Drastisches tun, wie z. B. alle Qt Quick-Anwendungen dazu zwingen, ein neues Rendering zu durchlaufen, nur diejenigen, die 2D und 3D mischen.

Qt 6 wird auch die Qt-Hardware-Rendering-Schnittstelle verwenden, um Qt Quick-Szenen (einschließlich 3D) zu rendern, was viele der aktuellen Probleme beheben sollte, mit denen die Qt Company heute konfrontiert ist, wenn sie OpenGL-Anwendungen (mit DirectX unter Windows, Metal unter macOS usw.) bereitstellt. d .).

Die Qt Company möchte auch, dass Endbenutzer die C++-Rendering-API verwenden können, die allgemeiner ohne Qt Quick erstellt wurde. Der Code ist jetzt wie die private API, aber sie warten auf Qt 6-Zeit (und den RHI-Port), bevor sie die Kompatibilitätsversprechen machen, die mit den öffentlichen APIs kommen.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

qml_puthon_user
  • 2. Dezember 2019 11:39

Доброго времени суток. Подскажите пожалуйста, я вызываю файл qml через python-скрипт. QtQuick работает нормально, но, когда дописываю import QtQuick3D 1.0, мне выдаётся ошибка, что модуль не установлен. У меня стоит ещё QtDesignStudio, так же прописываю в ней импорт и всё работает нормально, и при запуске GUI из самой студии, всё работает. Почему же тогда из питона не работает? Работаю под Windows пока что. Со сборкой модуля не справился, не знаю, как правильно делать. Спасибо!

Evgenii Legotckoi
  • 3. Dezember 2019 04:10

QtDesignStudio работает с C++, поэтому там работает, но вот относительно python думаю, что не все требуемые зависимости установлены для python пакетов.
К тому же, что именно вы используете для python? PyQt5 или Pyside?

qml_puthon_user
  • 3. Dezember 2019 04:11
  • (bearbeitet)

PyQt5.

Evgenii Legotckoi
  • 3. Dezember 2019 04:20

Ясно. Я видел, что вы вопрос на форум задали. Я вечером после работы гляну у себя на домашнем ПК, запустится ли ваш код. У меня там Ubuntu и вроде бы все пакеты установлены для PyQt5. Но вполне может быть так, что это может и не работать для PyQt5

qml_puthon_user
  • 3. Dezember 2019 04:21

Хорошо, спасибо большое! :)

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken