Android-Fragmente mit Qt Quick für Android

Sie können eine QtQuickView in einem Android UI Layout haben, indem Sie ein ViewGroup-basiertes Objekt verwenden. Hier werden wir ein FrameLayout verwenden.

Wenn Sie mit der QtQuickView-API nicht vertraut sind, sollten Sie ihre Dokumentation lesen, bevor Sie mit diesem Tutorial fortfahren.

Bevor Sie fortfahren, lohnt es sich, den Qt Academy-Kurs Einbetten von Qt Quick 3D-Inhalten in eine Android-App zu lesen.

Um zu beginnen, erstellen Sie ein neues Projekt in Android Studio unter Verwendung der Vorlage Bottom Navigation Views Activity.

  1. Suchen Sie das Fragment oder die Aktivität, unter der Ihr QtQuickView sichtbar sein soll. Hier verwenden wir HomeFragment und fragment_home.xml.
  2. Erstellen Sie in fragment_home.xml ein FrameLayout und setzen Sie dessen id wie unten gezeigt.
    <FrameLayout
    android:id="@+id/homeQmlFrame"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHeight_percent="0.8"/>

    Notieren Sie sich diese ID, da sie in HomeFragment beim Binden des Layouts referenziert werden muss.

  3. Fügen Sie in HomeFragment.kt eine Import-Anweisung für FrameLayout hinzu:
    import android.widget.FrameLayout
  4. Fügen Sie Ihre Importe für Ihre QtQuickView und Screen01 QML-Typen hinzu und deklarieren Sie sie innerhalb der Klasse:
    import org.qtproject.qt.android.QtQuickView
    import org.qtproject.example.RoboApp.RoboContent.Screen01
    
    class HomeFragment : Fragment() {
    
    private var binding: FragmentHomeBinding? = null
    private lateinit var homeQmlContent: Screen01
    private lateinit var homeQtQuickView: QtQuickView
  5. Weisen Sie Ihre QtQuickView zu und geben Sie ihr die Activity-Instanz mit requireActivity()
    homeQtQuickView = QtQuickView(requireActivity())
    homeQmlContent = Screen01()
  6. Initialisieren Sie die Layout-Parameter, wenn Sie Views programmatisch erstellen, dynamisch hinzufügen oder zur Laufzeit ändern. Andernfalls können Sie diesen Abschnitt überspringen, und Sie brauchen params mit addView() nicht zu verwenden.
    val params = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                          ViewGroup.LayoutParams.MATCH_PARENT)
  7. Fügen Sie Ihre Ansicht in das Layout ein, entweder mit:
    1. Verwendung von View-Binding innerhalb von onCreateView(): Stellen Sie zunächst sicher, dass View-Binding aktiviert ist, indem Sie den Abschnitt buildFeature in den Abschnitt build.gradle.kts android Ihrer Anwendung einfügen:
      buildFeatures {
          viewBinding = true
      }

      Fügen Sie dann Folgendes in onCreateView() hinzu:

      binding = FragmentHomeBinding.inflate( inflater, container, false)
      homeQtQuickView.loadContent(homeQmlContent)
      
      val root: View = binding.root
      binding.homeQmlFrame.addView(homeQtQuickView, params)
      ...
      return root
    2. Verwendung von findViewById() innerhalb von onCreate():
      val qtFrame = findViewById(R.id.qtFrame)
      qmlFrame.addView(m_quickView, params)
      m_quickView.loadContent(homeQmlContent)

      Siehe Verwendung von anderen Qt Quick für Android-Beispiele.

Der Inhalt von Qt Quick wird nun in Ihrem Home-Fragment angezeigt.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.