Qml Cómo usar loader dentro de tabview

No puedo encontrar una forma de usar un cargador para llenar una pestaña dentro de una tabulación. El cargador funciona bien cuando está fuera del TabView (es decir, si elimino los caracteres de comentario de línea múltiples en la parte superior de mainTrial.qml y el cargador más las conexiones están en la parte superior.) Pero si muevo el cargador en línea como un hijo de Una pestaña, obtengo un error "No puedo asignar varios valores a una propiedad singular, tampoco puedo dirigirme al cargador que está fuera de TabView usando menuLoader.source o column1.menuLoader.source u otras variantes. Otros dos archivos que definen las señales se incluyen para que pueda ver que las señales de trabajo.) ¿Qué estoy haciendo mal?

Edit: (Buena ley ole de permutaciones y combinaciones) Descubrí que si hago la declaración de Connections, un hijo del Loader que está en la pestaña, el problema desaparece. Voy a tener un solo "valor" asignado en la pestaña – que siendo el cargador y ahora puedo cargar un elemento qml por ficha.

// mainTrial

import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Layouts 1.1 Item { id: trial width: 360 height: 360 ColumnLayout { id: column1 spacing:150 Item {Layout.fillHeight: true} TabView { id: tabPages Tab { id: welcomePage title: "Welcome" // /* Loader{ id: menuLoader source: "mainTrial1.qml" anchors.top: parent.top Connections { id: menuConnection ignoreUnknownSignals: true target: menuLoader.item onMainTrial3: { menuLoader.source = "mainTrial3.qml" console.log("originated from " + origin) } onMainTrial1: { menuLoader.source = "mainTrial1.qml" console.log("originated from " + origin) } } } } Tab { id: statusPage title: "Status" } } } } 

// mainTrial1 (con una definición de señal)

Este archivo define una de las señales utilizadas para cargar el siguiente objeto qml. Lo he incluido aquí para que pueda ver que la señal funciona).

 import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Layouts 1.1 Item { id: page1 property string origin: "Hello" signal mainTrial3(string origin) ColumnLayout { spacing: 15 Rectangle { width: 100 height: 62 color: "red" MouseArea { anchors.fill: parent onClicked: { mainTrial3("origin = from MouseArea") } } } Button { text: "Sorting and scanning" onClicked: { mainTrial3(origin = "from Button") } } } } 

// mainTrial3 (con la otra definición de señal)

Este archivo define la otra señal utilizada para recargar el objeto qml anterior. Lo incluí aquí para que pueda ver que ambas señales funcionan cuando se hace clic en los rectángulos).

 import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Layouts 1.1 Item { id: page3 property string origin: "Hello" signal mainTrial1(string origin) GridLayout { columnSpacing: 5 rowSpacing: 5 columns: 1 Rectangle { width: 100 height: 62 color: "blue" MouseArea{ anchors.fill: parent onClicked: { mainTrial1(origin = "from MouseArea1") } } } Rectangle { width: 100 height: 62 color: "blue" MouseArea{ anchors.fill: parent onClicked: { mainTrial1("from MouseArea2") } } } } } 

Ok, así que tomé su código, utiliza un poco, y personalizar el resto para cargar una sola pestaña para hacer hablar alrededor de él un poco más fácil. No es exactamente lo que publicaste pero debería mostrarte cómo:

  1. Recibe la señal cuando se hace clic en algo dentro de la pestaña.
  2. Dónde y cómo cargar las pestañas.

Con esto usted debe tener una base sólida para personalizar y añadir en más de dos, tres, etc … tabs y cambiar dinámicamente basados ​​en las señales en mi ejemplo.

Es importante destacar que Tab es un Loader por lo que no es necesario definir un Loader interno. A continuación, no estoy totalmente experimentado con QML todavía (QWidget es más lo mío), pero las Connections que está utilizando parecían causar algunos problemas, no estoy seguro de que su totalmente necesario, por lo que los eliminó de mi ejemplo.

En mi ejemplo, solo cargue un solo archivo QML en una pestaña y envíe una señal cuando haga clic en el rectángulo azul o el rectángulo rojo dentro de la pestaña que acaba de cargar.

Podrá ver la impresión en la consola. He dejado un comentario en el manejador de señales donde podrías cambiar el source de la Tab y cargar dinámicamente la Tab siguiente.

¡Disfrutar!

TabViewTest.qml

 import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Layouts 1.1 Item { id: tabViewTest width: 360 height: 360 TabView { id: tabView width: parent.width height: parent.height Tab { title: "Welcome" id: dynamicTab anchors.top: parent.top // [1] Specify the source URL to load the content. source: "RectanglesTab.qml" // [2] Define a signal within the Tab that will // be connected to the 'contentsClicked' signal // in each tab QML file. signal tabContentsClicked( string rectColor ) // [3] Implement the signal handler. onTabContentsClicked: { console.log( "Clicked on a", rectColor, "rectangle." ) // [4] Now that the user has clicked somewhere within the tab // you could optionally the source or sourceComponent here like // the comment below. // // Just make sure it also has a signal called 'contentsClicked' // // dynamicTab.source = "someOtherTab.qml" } onLoaded: { console.debug( "Loaded", source ); // [4] Here's the key action, connect the signal // 'contentsClicked' to our signal // 'tabContentsClicked' from the loaded item // ie RectanglesTab.qml dynamicTab.item.contentsClicked.connect(tabContentsClicked) } } Tab { id: statusTab title: "Status" } } } 

RectanglesTab.qml

 import QtQuick 2.0 import QtQuick.Layouts 1.1 Rectangle { id: rectanglesTab width: parent.width height: parent.height color: "black" signal contentsClicked( string rectColor ) GridLayout { width: parent.width height: parent.height columnSpacing: 5 rowSpacing: 5 columns: 1 Rectangle { width: parent.width height: 120 color: "blue" MouseArea{ anchors.fill: parent onClicked: { contentsClicked( "blue" ) } } } Rectangle { width: parent.width height: 120 color: "red" MouseArea{ anchors.fill: parent onClicked: { contentsClicked( "red" ) } } } } } 
  • Convertir jstring a QString
  • Cómo agregar archivos de expansión de Android con Qt
  • Qt: Cómo configurar el icono de la aplicación en Android e iOS
  • Cómo importar bibliotecas compartidas en Cmake para Android
  • Configurar una aplicación Qt5 5.7 para Android con CMake
  • Qt para android: cambia el icono de la aplicación
  • Qt Android: ¿Por qué se crea QtApp-debug.apk para una versión de Release?
  • Qt versiones para arquitecturas mips, brazo, x86 faltan
  • Empuje usando Parse en Qt5.5 para Android: NullPointerException en getCurrentInstallation
  • No se puede emitir señal en Android
  • Android Emulator no funciona en Ubuntu después de actualizar Android Studio a 2.0 - Biblioteca Qt no encontrada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.